socket服務(wù)啟動之后過一會就會出現(xiàn)客戶端不能連接的情況,什么原因?qū)е碌哪兀?br />
還有就是現(xiàn)在服務(wù)器一直收到 ping 請求,有的一個用戶在同一秒發(fā)送了七八次ping
還有問題就是connections的值一直在增長,但是并沒有那么多用戶,現(xiàn)在用戶量最多同時在線幾百
memory也是一直增長。
之前項目運(yùn)行的好好的,后來用戶多了一點之后就會出現(xiàn)有的用戶收不到socket消息,不知道用戶是否重連沒有重新進(jìn)組還是什么。
workerman手冊有說,單個進(jìn)程連接數(shù)超過1000的話需要安裝event擴(kuò)展
php -m| grep event可以看php是否安裝event擴(kuò)展。
php start.php status 里顯示 event-loop:\Workerman\Events\Event 則是啟用。
不裝event擴(kuò)展當(dāng)連接數(shù)超過1000時,超過的部分將無法收到消息,無法檢測到連接斷開等事件,導(dǎo)致連接數(shù)增多,消息收不到或延遲,內(nèi)存增大。
保險起見linux內(nèi)核都優(yōu)化下。
延遲問題根據(jù)你提供的信息無法判斷延遲原因,可能是業(yè)務(wù)有什么耗時操作導(dǎo)致延遲,也可能是沒裝event擴(kuò)展連接數(shù)超過1000限制導(dǎo)致的延遲
現(xiàn)在就是客戶端和服務(wù)器端都設(shè)置了10秒進(jìn)行心跳檢測。服務(wù)器10發(fā)送給客戶端。客戶端10秒給服務(wù)器發(fā)送心跳檢測。但是現(xiàn)在打日志看到同一個用戶在同一秒內(nèi)能發(fā)送10個左右的心跳檢測,這種是客戶端導(dǎo)致的嗎?但是當(dāng)那個用戶重新鏈接之后就是10秒一次了
onMessage記錄總時間包括wokerman處理鏈接的時間嗎?就像nginx代理API那樣,PHP能記錄nginx執(zhí)行時間嗎?
現(xiàn)在是onMessage收到之后能很快就返回結(jié)果,但是在客戶端點擊發(fā)送到onMessage收到消息中間會出現(xiàn)延遲,不知道是客戶端的問題還是網(wǎng)絡(luò)問題或者服務(wù)端workerman問題,這種怎么查證????
onMessage 是收到消息觸發(fā)的,不包括之前消息接收時間。
你可以嘗試把nginx去掉試下排除nginx問題,暫時去掉所有業(yè)務(wù)排除業(yè)務(wù)問題。
我直接通過端口啟動的,然后通過域名加端口訪問的時候還是要先走nginx解析域名的是吧?但是我客戶端建立socket鏈接之后每次發(fā)送消息還要再走nginx解析嗎?中間這塊的時間不應(yīng)該是workerman的解析嗎?
既然不走nginx。那現(xiàn)在情況是 客戶端執(zhí)行send之后到我gateway Events的onMessage第一次輸出日志,有時候中間的時間會是十幾秒,這種怎么查?是網(wǎng)絡(luò)問題還是服務(wù)端workerman服務(wù)問題?
打了日志,進(jìn)入onMessage的時候記錄開始時間[毫秒] 然后在業(yè)務(wù)處理完之后做日志記錄減去開始時間就沒有大于20毫秒的。但是在使用的時候確實還是出現(xiàn)卡頓,還有什么辦法查證嗎?
之前客戶端有些問題會創(chuàng)建一堆的連接,現(xiàn)在做的客戶端做的心跳檢測是10秒一次,但是我服務(wù)器收到的是有一大批都是每個連接每秒好幾次ping事件。這些ping事件多了即使業(yè)務(wù)處理的快也會造成一定的堆積,business處理不過來導(dǎo)致卡頓吧?
安卓創(chuàng)建socket連接,當(dāng)出現(xiàn)斷網(wǎng)或者異常的時候socket連接會重新創(chuàng)建,但是之前的socket連接沒有銷毀,不管是之前的還是新的連接用的都是同一個變量名,然后當(dāng)網(wǎng)絡(luò)連接恢復(fù)的時候就客戶端會出現(xiàn)觸發(fā)很多次的onopen,是不是意味著斷網(wǎng)的時候創(chuàng)建的那些socket又活過來了,然后這些socket還能正常發(fā)送請求?用的是不是還是同一個clientid?