在onclose方法處增加了業(yè)務(wù)代碼,偶爾會(huì)出現(xiàn)沒有進(jìn)入onClose的方法內(nèi),這是什么原因?日志跟蹤也沒有,是不是會(huì)出現(xiàn)workman服務(wù)無法監(jiān)聽到長連接斷線的情況呢?
public static function onClose($client_id) {
$port = $_SERVER;
switch ($port) {
case '8282':
default:
$url = 'xxxxxxx';
$data = json_encode();
$dir_name = '/www/gateway/logs/';
if(!is_dir($dir_name)){
@mkdir($dir_name, 0777, true);
}
$result = Curl::curl_post($url, , 3);
if(!$result || $result != 0){
file_put_contents($dir_name.date('Ymd').'.log', date('Y-m-d H:i:s').' ' .json_encode($result).' client_id:'.$client_id.PHP_EOL,FILE_APPEND);
}
break;
}
}
試試自己加上心跳,一般能避免被路由器切斷,即便被切斷,因?yàn)樾奶l(fā)送失敗,也不至于丟失 onclose。
@2255:不行就再看看 onError 的情況 http://doc.workerman.net/315152
你這個(gè)情況有點(diǎn)奇怪,可能要仔細(xì)排查才能確定原因了。
斷電、斷網(wǎng)、路由器異常等等極端情況都會(huì)造成無法及時(shí)觸發(fā) onClose 。
建議你根據(jù)官方手冊好好檢查下這個(gè)參數(shù): Gateway::$pingNotResponseLimit > 0 , 大于0代表客戶端必須在規(guī)定的時(shí)間內(nèi)發(fā)送心跳給服務(wù)端,否則服務(wù)端會(huì)關(guān)閉對應(yīng)連接,并觸發(fā)onClose。