你好,現(xiàn)在做的項目使用上了GatewayWorker框架,與客戶端(網(wǎng)頁,pad,windows客戶端)做消息通訊,現(xiàn)在遇到一個問題是保活相關(guān)的。C++或者Java那邊使用的第三方庫,自帶?;顧C制,會定時給服務端發(fā)ping消息來檢測檢測是否保持連接狀態(tài),但是抓包的結(jié)果顯示opcode碼為0x09,服務端在onmessage監(jiān)聽不到消息,導致我們服務端的一段時間過后就斷開連接,保活失敗,請問有沒有辦法監(jiān)聽或者兼容該情況?
$gateway = new Gateway("websocket://0.0.0.0:8384");
// gateway名稱,status方便查看
$gateway->name = 'YourAppGatewayWS';
// gateway進程數(shù)
$gateway->count = 4;
// 本機ip,分布式部署時使用內(nèi)網(wǎng)ip
$gateway->lanIp = '127.0.0.1';
// 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4000 4001 4002 4003 4個端口作為內(nèi)部通訊端口
$gateway->startPort = 4000;
// 服務注冊地址
$gateway->registerAddress = '127.0.0.1:1237';
// 心跳間隔
$gateway->pingInterval = 10;
// 心跳數(shù)據(jù)
//$gateway->pingData = '{"type":"ping"}';
$gateway->pingData = '';
$gateway->pingNotResponseLimit = 2;
目前為了兼容這種情況是讓客戶端發(fā)送text消息來做?;?,請問有沒有其他的方法呢?
Workerman Websocket協(xié)議類會在客戶端發(fā)送ping后自動返回pong。
代碼在
https://github.com/walkor/Workerman/blob/master/Protocols/Websocket.php#L116
嗯,這塊代碼有看到過,但是文檔上建議的心跳檢測配置客戶端?;畹姆椒ㄊ强蛻舳嗽偌觽€文本消息定時發(fā)送給服務端,這樣服務端才能檢測到客戶端的存在,有沒有辦法直接識別客戶端的0x09的opcode消息來實現(xiàn)心跳檢測?不知道我有沒有理解錯誤,請指教!
start_gateway.php里加一句
$gateway->onWebSocketPing = function($connection) {
$connection->pingNotResponseCount = -1;
};
試下
$gateway->onWebSocketPing = function($connection) {
$connection->pingNotResponseCount = -1;
$connection->send('pong');
};