常常在羣裏聽到一些朋友問:TP 的項目怎麼遷移到 mixphp 來處理高併發,我一般都是回覆須要重寫,但是一個開發好久的 TP 項目,代碼量巨大,又怎麼可能會花大量時間成原本重寫呢?php
那麼爲什麼咱們不嘗試換一種思路來解決問題?git
在現有框架不變的狀況下,引入 mixphp 來處理高併發的部分。
二八效應在任何領域都存在,若是你作過多個項目,你就會發現:github
一個項目中高併發的接口或頁面,一般只佔到項目的 20% 如下。
一些常見的高併發場景的問題:web
一些常見的大量計算場景的問題:redis
在 TP 的接口中使用消息隊列,把要入庫的數據寫入 redis 的 list 類型中。數據庫
$redis->lpush($key, $data);
而後在 mixphp 中使用多進程服務來消費這個隊列:緩存
DEMO (V1):https://github.com/mix-php/mi...安全
mixphp 的多進程服務有不少傳統框架所不具有的特色:服務器
該種場景瓶頸已經不在數據庫,由於 HTTP 接口是請求響應式,如此頻繁的請求,不斷的創建與關閉鏈接消耗了太多的服務器性能,這時需使用長鏈接協議 WebSocket 來優化。websocket
使用 mixphp 的 WebSocketd 封裝,能很快就搭建一個數據推送系統,解決 API 輪詢的性能瓶頸:
DEMO (V1):https://github.com/mix-php/mi...
若是從一個數據表中取出大量數據,一個進程計算又太慢了,若是分多個進程分頁去查詢後,再分開計算,速度是快了,可是若是查詢中數據有變化,由於每一個進程分別會查一次數據庫,就會致使有的數據遺漏沒有計算到、有的又被屢次計算,致使計算結果錯誤。
這時使用 mixphp 的多進程服務就不會有這個問題,mixphp 的多進程服務在進程內部作了生產者消費者模型,只需使用一個進程去數據表取出數據,而後一行一行發送給消費者進程去計算,這樣就高效安全的完成了一次大量計算。
GitHub: https://github.com/mixstart/m...
官網:http://www.mixphp.cn/