我在gateway里用自定義tcp協(xié)議,參考text協(xié)議寫的,區(qū)別就是text協(xié)議用的\n作為結束符,我是用的5555作為結束符。。。老大說,text協(xié)議不會粘包,但是為啥我用5555結尾就粘包呢?客戶端是智能電器,可能因網絡不穩(wěn)定導致的粘包。 我在input($buffer)中,只return一個包的長度,但是在encode($buffer)中,還是會同時把兩個包一起發(fā)過來。 ...
redis優(yōu)點主要是內存讀取和本地持久化,但提供的數據類型太簡單,只能字符串和一維key的操作。所以做做簡單的存儲和并發(fā)檢索還是可以的,但是要想更復雜的功能,我們就要基于redis做封裝。 那么,如果用workerman來開發(fā)仿造一個redis,php-frm直接連接worker進程中的內存變量,兩者都是常駐內存,數據也都是在內存中的,就像Gateway::bindUid一樣的原理,豈不是更爽。 暫且不管redis的...
我們有不同類型的硬件設備,想每種設備連接不同的Gateway端口。因為沒有大面積測試過,請教下,如果只開一個register和BusinessWorker來管理多個Gateway,有沒有什么隱患?...
需求是這樣的,在onWorkerStart中,定時檢測并異步執(zhí)行耗時任務,當有客戶端連接ws時,可以實時獲取該進程任務的執(zhí)行日志。 目前我采用的方案是文件和redis這樣的中間件。我在想,既然timer和websocket同屬于一個進程,那么能否不用中間件,直接在onWorkerStart里發(fā)送send給客戶端呢?...
由于郵件發(fā)送比較耗時,所以我用AsyncTcpConnection異步任務,但由于workerman是多進程單線程,那么在如下場景中,該如何提高并發(fā)效率呢? 場景: 有2個耗時任務需要在同一時間執(zhí)行,其中一個是郵件群發(fā),假設要發(fā)送1000個郵件,任務進程100個。 方案疑問: 1、1000個郵件分別通過AsyncTcpConnection發(fā)送給100個進程。這種方案會因為100個進程被占滿,而導致另一個任務必須等待1...
不知道哪里寫的不對,設置了4個進程,同時打開3個網頁,每個等待10s,結果總時長需要30s,求大神幫忙解釋下,謝謝了 下圖是http: 下圖是websocket ...
下面兩個圖是我分別重啟后截圖,默認都是從client_id=1開始遞增。 這樣是不是一旦項目上線后,就不能關閉重啟了,只能通過平滑重啟,不然clietn_id與數據庫的uid對不上了?或者有沒有其他解決辦法? 查看源碼發(fā)現,client_id是通過ip+端口+connection_id的16進制,connection_id是當前連接數,所以workerman重啟后,connection_id就從1重新開始計算了。 /...