国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于長連接聊天時(shí),出現(xiàn)斷電斷網(wǎng)情況時(shí),收不到離線消息的問題

chosen1cwp

基于workerman開發(fā)了一個(gè)客服系統(tǒng),訪客端是用的web+flash,客服使用as3寫的,假設(shè)客服(a電腦)和訪客(b電腦)正在通話,然后我把客服所在a電腦的網(wǎng)絡(luò)關(guān)閉掉,訪客(b電腦)那邊按理應(yīng)該收到客服離線的消息才對(duì),但是訪客一直都沒收到客服離線消息,直到我把客服所在a電腦的網(wǎng)絡(luò)連接上,此時(shí)訪客(b電腦)就會(huì)收到客服的離線消息。

【 對(duì)于實(shí)時(shí)性要求很高的場(chǎng)景,需要客戶端回應(yīng)心跳,比如服務(wù)端給某個(gè)客戶端發(fā)了心跳,如果一段時(shí)間(比如10秒)沒收到客戶端的心跳回復(fù)就認(rèn)為鏈接斷開了,服務(wù)端就關(guān)閉鏈接 】這個(gè)心跳該如何做呢?

【記得workeman中有那個(gè)pingpang的心跳檢測(cè)?是不是呢?】

11499 3 1
3個(gè)回答

walkor 打賞

這個(gè)和TCP傳輸層協(xié)議的實(shí)現(xiàn)有關(guān)!

非正常關(guān)閉對(duì)端可能無法立刻感知或者永遠(yuǎn)無法感知
a端非正常關(guān)閉(斷電、把網(wǎng)線等)b端不會(huì)立刻感知到的,如果二者直接一直沒有通信數(shù)據(jù)(沒有keep_alive或者數(shù)據(jù)交互),則b端永遠(yuǎn)檢測(cè)不到a已經(jīng)斷開,這個(gè)是TCP的自身機(jī)制。

無法立刻感知或者無法感知的原因
a端非正常關(guān)閉,b端如果有向a端發(fā)送通訊數(shù)據(jù)(或者有keep_alive),這時(shí)很可能會(huì)發(fā)送超時(shí),然后TCP層會(huì)自己會(huì)重試,(重試時(shí)機(jī)及次數(shù)等由系統(tǒng)參數(shù)決定),重試多次無果后才會(huì)關(guān)閉鏈接(這時(shí)服務(wù)端才得到鏈接斷開的通知,觸發(fā)onClose),從a端非正常關(guān)閉到判斷鏈接斷開如果依賴TCP本身的機(jī)制可能要持續(xù)至少10分鐘才能完成,也就導(dǎo)致b端很久才能感知(如果之間沒有通訊則永遠(yuǎn)無法感知)。

要求實(shí)時(shí)檢測(cè)解決方案-應(yīng)用層心跳
如果對(duì)于檢測(cè)鏈接是否可用實(shí)時(shí)性要求很高,需要在應(yīng)用層面做心跳檢測(cè),而不是依賴與TCP本身的機(jī)制。例如應(yīng)用每10秒中發(fā)送一個(gè)心跳給客戶端,客戶端收到心跳后立刻返回一個(gè)回復(fù),如果服務(wù)端心跳發(fā)出后一段時(shí)間(假如也是10秒)后客戶端并沒有回應(yīng)心跳,則判斷客戶端鏈接已死,就直接斷開鏈接。

workerman里如何解決
更新下代碼 版本2.1.2 或者 版本2.1.3都可以
只更新了 applications/XXX/Bootstrap/Gateway.php 和 conf/conf.d/Gateway.conf 兩個(gè)文件
http://www.wtbis.cn/workerman下載

配置 conf/conf.d/Gateway.conf
中設(shè)置
ping_interval = X
其中X代表gateway多長時(shí)間向客戶端發(fā)送一次心跳數(shù)據(jù),單位為秒

設(shè)置向客戶端發(fā)送的心跳請(qǐng)求數(shù)據(jù),用文件保存,這里設(shè)置成文件的路徑,例如
ping_data = ../applications/Chat/ping.data
其中ping.data文件生成方式參考http://wenda.workerman.net/?/question/34

設(shè)置
ping_not_response_limit = N
代表客戶端連續(xù)N次沒有回應(yīng)心跳數(shù)據(jù)就斷開鏈接,N可以為1

注意:開啟workerman心跳檢測(cè)后客戶端必須回應(yīng)心跳數(shù)據(jù),不然會(huì)導(dǎo)致鏈接斷開

這里有一個(gè)基于workerman開發(fā)的客服系統(tǒng)源碼,可以直接用。

  • chosen1cwp 2014-08-29

    群主,如果我的ping.data 里面這樣寫{"type":"Heartbeat","content":"ping","time":1409310503}/n ,那么我在客戶端只要接受到的消息的type=Heartbeat時(shí),就返回一個(gè){json}/n 格式的數(shù)據(jù)就可以了嗎?服務(wù)器端不需要接收一下嗎 ???還是服務(wù)器上已經(jīng)做過接受處理了?如果接受并處理了是在那里處理的?請(qǐng)教一下

  • walkor 2014-08-30

    服務(wù)端要接收,接收到忽略就可以了

chosen1cwp

謝謝 大謝啊 群主好人呢

  • 暫無評(píng)論
jorry橋

注意:心跳格式是

自定義字符串+回車

這個(gè)回車就是鍵盤上的enter換行

否則將無法接收到心跳,另外版本也得注意....

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??