分享下這類問題的可能原因以及排查思路:
客戶端刷新頁面前后的$client_id是完全不同的,相當(dāng)于是不同的兩個(gè)socket連接,當(dāng)然刷新之后則前一個(gè)socket連接生命周期已然銷毀; 如果進(jìn)行了uid和client_id 綁定的話,這個(gè)關(guān)系可以是一對(duì)多的,而顯示客戶端在線的肯定是當(dāng)前已經(jīng)連接OK的或者說是刷新后建立成功的socket連接,而有時(shí)收不到服務(wù)端推送消息的連接很有可能就是服務(wù)端將消息推送到了已經(jīng)下線的$client_id那里去了。所以只需調(diào)試記錄下所發(fā)送的$client_id以及對(duì)應(yīng)的在線狀態(tài),相信問題定能迎刃而解。
ps找到主進(jìn)程pid,然后在workerman框架的同級(jí)目錄下將其重寫主進(jìn)程文件pidFile并賦予必要的權(quán)限,至于pidFile的命名規(guī)范看手冊(cè):http://doc.workerman.net/worker/pid-file.html