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

關于pingNotResponseCount

fdream

我的應用場景需要長時間維護不小量的連接,并且需要對client的非正常斷線做出正確的反應。
查資料得知TCP協議在發(fā)送信息后,對方會回復一個收到,我的抓包結果也印證了這一點。于是想利用這一點維護pingNotResponseCount,所以client在收到ping后沒有額外回復任何信息。我一直沒搞清楚TCP協議中的那個“收到訊息”應該怎樣獲得,猜測是fwrite的返回值。但是在實際應用時,發(fā)現在TcpConnection.php的send()中,fwrite的返回值與client是否在線沒什么關系。client明明已經非正常斷開,send()發(fā)送ping時的返回值始終是true(也就是說fwrite的返回值始終與$send_buffer的長度相等)。
現在我想請教一下,如何在client不主動回復server發(fā)來的ping消息,而且不主動發(fā)送ping消息給server的情況下,正常的維護pingNotResponseCount?換句話說,如何獲取client對于收到的包的自動回復?
對于socket只理解了皮毛,描述不清楚的地方還請大家多多包容。
我的workerman版本是3.1.4;php版本是手動編譯的5.6.7,能開的選項都開了;服務器是CentOS 7.0 64位

3346 2 0
2個回答

fdream

時間太晚了嘛...

  • 暫無評論
walkor 打賞

查資料得知TCP協議在發(fā)送信息后,對方會回復一個收到,我的抓包結果也印證了這一點。

這個是tcp層面的ack包,是系統內核控制的,對于應用層是透明的,也就是說應用層無法感知到這個ack。

fwrite的返回值與client是否在線沒什么關系。client明明已經非正常斷開,send()發(fā)送ping時的返回值始終是true

應用層通過socket接口發(fā)送數據給對端,只要數據寫到本地socket緩沖區(qū)就返回發(fā)送成功,而緩沖區(qū)的數據何時發(fā)送給對端是由操作系統內核控制的,并且受網絡環(huán)境以及對端接收速度影響。如果對端突然斷電或者網絡切斷等極端情況客戶端是來不及發(fā)送fin包給服務端,服務端也就無法立刻得知連接已經斷開。這種情況需要應用層心跳來解決。

要想及時知道連接是否斷開,一般都要應用層心跳來支持,客戶端需要發(fā)送點數據告訴服務端它還在。

  • fdream 2015-07-22

    多謝大神回答,原來是這樣的,漲姿勢了。那請問系統內核有關socket的設置要如何修改?如果得知本地緩沖區(qū)的占用情況呢?

年代過于久遠,無法發(fā)表回答
??