使用thinkphp5.0整合的phpsocket.io的叫號(hào)的項(xiàng)目,有呼叫端和操作端,呼叫端展示隊(duì)列和呼叫播放,客戶(hù)端總共20多個(gè)。
某些呼叫端在運(yùn)行一段時(shí)間后,會(huì)無(wú)法響應(yīng)操作的推送。服務(wù)端和客戶(hù)端都沒(méi)有報(bào)錯(cuò),客戶(hù)端的狀態(tài)還是連接狀態(tài)。
這種情況刷新客戶(hù)端,或者,重啟服務(wù)端都能解決,找不到原因,求大神指點(diǎn)解決或?qū)ふ覇?wèn)題的思路~
補(bǔ)充一下,服務(wù)端是windows的,php版本5.5.9,workman版本3.5.31,phpsocket.io的版本應(yīng)該是v1.3.0
有些客戶(hù)端有問(wèn)題,并且客戶(hù)端刷新后就好了,說(shuō)明服務(wù)端應(yīng)該沒(méi)問(wèn)題。這個(gè)不好查了,得記錄日志,看走到哪里沒(méi)反應(yīng)。
我在客戶(hù)端加了很多js輸出,沒(méi)有異常,在客戶(hù)端沒(méi)反映的時(shí)候,不刷新客戶(hù)端,重啟服務(wù)端也能解決問(wèn)題,所以我懷疑是連接的問(wèn)題更大一些,這方面又不熟悉,分析不出來(lái)。
服務(wù)端和客戶(hù)端都有日志,沒(méi)有發(fā)現(xiàn)程序錯(cuò)誤??蛻?hù)端的呼叫端運(yùn)行在安卓電視中,在安卓的webview中運(yùn)行,操作端是瀏覽器。一個(gè)操作端對(duì)應(yīng)兩個(gè)呼叫端,其中一個(gè)是單獨(dú)的,一個(gè)是匯總多個(gè)操作端的。經(jīng)常是一個(gè)好使一個(gè)不好使。
服務(wù)器上面還有其它服務(wù),不好換系統(tǒng),這情況上虛擬機(jī)能不能行。
客戶(hù)端不到30個(gè),像這種情況如果客戶(hù)端反復(fù)刷新的話,也應(yīng)該屬于是一次連接的吧,不應(yīng)該會(huì)超過(guò)256吧。
還是說(shuō)每次連接斷開(kāi)再重連,之前的連接沒(méi)有釋放掉。
有沒(méi)有什么方法能判斷連接的狀態(tài),在出現(xiàn)情況時(shí)能自動(dòng)重連也行
我查資料說(shuō),phpsocket.io是自帶心跳的,當(dāng)個(gè)別客戶(hù)端沒(méi)有響應(yīng)時(shí),我重啟服務(wù)端,客戶(hù)端也恢復(fù)正常了。
有沒(méi)有這種情況,客戶(hù)端還保持著連接,但收不到推送。
這種情況怎么能測(cè)試出來(lái)呢。
服務(wù)端或是客戶(hù)端的,emit方法有沒(méi)有什么返回值,能判斷出對(duì)方有沒(méi)有收到推送的狀態(tài)呢,求大神指點(diǎn)
又想到了一點(diǎn),我在單獨(dú)測(cè)試的時(shí)候,是很難發(fā)生類(lèi)似的問(wèn)題的,用程序模擬推送和呼叫,掛很久都不會(huì)出問(wèn)題。實(shí)際運(yùn)行時(shí)個(gè)別客戶(hù)端就會(huì)出現(xiàn)問(wèn)題,頁(yè)面中有disconnect,觸發(fā)后頁(yè)面上會(huì)顯示一個(gè)斷開(kāi)的標(biāo)志,這個(gè)并沒(méi)有觸發(fā),但就是收不到推送。刷新客戶(hù)端或重啟服務(wù)端都能解決,這種情況是客戶(hù)端超時(shí)嗎?