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

Workerman作為客戶端和服務(wù)器關(guān)閉連接后 怎么做到自動和服務(wù)器重連?

wuyuan

我想在客戶端斷開連接時重新和服務(wù)器建立連接。我在onClose里面這樣寫不行,要怎么寫才對?
[attach]363[/attach]

8334 7 0
7個回答

walkor 打賞

在onClose時調(diào)用$con->connect()就可以重連了,不用重新new AyncTcpConnection。
注意:這個重連特性需要workerman版本>=3.3.4。

$con = new AsyncTcpConnection(...);
$con->onXXX=function...
// onClose時重連即可
$con->onClose=function($con) {
    $con->connect();
};
$con->connect();
  • 暫無評論
wuyuan

謝謝walkor!

  • 暫無評論
walkor 打賞

不客氣

  • 暫無評論
wuyuan

@walkor 重新連接成功了,onConnect有東西輸出,服務(wù)器端也收到消息,但是客戶端沒收到服務(wù)端發(fā)送的數(shù)據(jù)。正常情況下應(yīng)該是一直循環(huán)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)吧

[attach]364[/attach]

服務(wù)端接收的數(shù)據(jù)
[attach]365[/attach]

服務(wù)端代碼
[attach]366[/attach]

  • 暫無評論
walkor 打賞

稍后我看下

  • 暫無評論
walkor 打賞

我知道問題了,
onClose里面不能用定時器調(diào)用$con->connect()重連,因為定時器是異步的,異步鏈接對象onClose時不立刻調(diào)用$con->connect()就會被workerman回收,異步鏈接的onMessage等回調(diào)都被回收了,所以沒作用。

定時重連只能重新new AsyncTcpConnection了。
如果不需要定時重連,可以在onClose里面直接$con->connect()

  • pader 2016-08-26

    一般情況下,都不會 close 就立即重連吧,都會用定時器等個至少幾秒。因為多數(shù)情況下由于服務(wù)端或者網(wǎng)絡(luò)不穩(wěn)定的斷開,就算立即重連也多半是失敗的。

pader

在 onClose 里面添加的定時器中,創(chuàng)建新的 $connection 時重連時需要把整個 onWorkerStart 里面創(chuàng)建 $connection 的部分都執(zhí)行一遍。可以把 onMessage, onClose, onError 三個寫成獨立的函數(shù),然后回調(diào)傳入函數(shù)名稱就行了。

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