除去如下情況:
1.接收消息主動調(diào)用
2.對端異常斷開
3.數(shù)據(jù)庫鏈接異常
根據(jù)手冊 http://doc.workerman.net/315149
當客戶端連接與Workerman斷開時觸發(fā)的回調(diào)函數(shù)。不管連接是如何斷開的,只要斷開就會觸發(fā)onClose。每個連接只會觸發(fā)一次onClose。
只有這一種情況,客戶端與workerman鏈接斷開時。
謝謝@walkor
目前我這網(wǎng)絡打不開新版手冊,我再通過其它方法試試
我還有一個問題,目前這個函數(shù)是作為客戶端在$con =new AsyncTcpConnection中的
在里這個有以下方法:
$con->onConnect,
$con->onMessage,
$con->onError,
$con->onClose=function($con){
$con->reConnect(0.1);
}
在觸$con->onClose發(fā)生重連后我這邊$con->onConnect中有幾個Timer::add會再在原來的基礎上再起一遍,按照這樣情況是不是所有的回調(diào)函數(shù)都是又重復調(diào)用一遍而不是重新初始化調(diào)用啊?
我再描述一下,
1我實例化了一個異步鏈接,
2然后在實例中的onConnect回調(diào)函數(shù)中設置若干個計時器,
3在onClose回調(diào)中寫了reConnect
在調(diào)用onClose后希望reConnect重新鏈接,
現(xiàn)在出現(xiàn)的情況是鏈接重新建立起來了,但是onConnect中的計時器再起了一遍,等于說是計時器變成雙份了
這個屬于業(yè)務邏輯問題了,
你可以給鏈接做個標記,加定時器的時候判斷下這個標記,沒有的話加定時器并設置標記,有的話就說明加過了,就不再加了。
例如
$con->onConnect = function($con) {
// 鏈接是個php對象,可以隨時動態(tài)添加屬性的,這里給這個鏈接加個timer_added屬性記錄是否加過定時器
if (empty($con->timer_added)) {
Timer::add(...);
$con->timer_added = true;
}
};
或者在onClose的時候關閉之前的定時器。
$con->onConnect = function($con) {
$con->timer_id = Timer::add(...);
};
$con->onClose = function($con) {
Timer::del($con->timer_id);
};