recv data before handshake. Buffer 这是什么情况咧,找了半天没找到原因,求帮助。

0
$client = new AsyncTcpConnection('ws://xxx.com:80');
$client->onConnect = function($con) {
$rid = time();
$lang = "kor";
$con->send('xxx');
};
$client->onMessage = function($con, $data) use($ids,$orates,$client) {
....
}
$client->connect();

代码如上,日志隔三差五就报下面错误,找不到有原因,求帮助...
recv data before handshake. Buffer:890c31303a34333a35332e373833
error package. package_length=false

已邀请:

walkor

赞同来自:

检查下代码里是否有 new Worker('ws://...') 或者 new Gateway('ws://...'),
改成 new Worker('websocket://...') 或者 new Gateway('websocket://...'),

zoofei

赞同来自:

感谢walkor回复
代码没有new ws://,
代码整体启动了
Gateway('Websocket://0.0.0.0:7272'),
Register('text://0.0.0.0:1236');
BusinessWorker();
然后单独在开个new Worker();做定时任务。


Timer::add($this->sec, array($this,'refresh'));
function refresh(){
$client = new AsyncTcpConnection('ws://xxx:80');
echo "start connect id:".$client->id;
因为远端经常掉线或者踢人,所以没有保持长连接,每次定时开始都重新new一个连接,获取数据后立即destory,就是这个异步链接经常报错:

start connet id:48
connect id:48 buffer:05:37:00.426 recv data before handshake. Buffer:890c30353a33373a30302e343236
error package. package_length=false
}

/*
* Websocket protocol for client.
*/
Class Ws{
public static function input($buffer, $connection)
{
if (empty($connection->handshakeStep)) {
echo "connect id:".$connection->id." buffer".$buffer;
echo "recv data before handshake. Buffer:" . bin2hex($buffer) . "\n";
return false;
}
}

walkor

赞同来自:

看起来是服务端没有按照websocket协议来传输数据,还没有完成websocket握手,服务端就发来了websocket数据。
正常流程是先发起websocket握手,然后传输数据。

zoofei

赞同来自:

过年之前我就一直开着服务,年后回来一看,服务死掉了,有大量这种错误,开始以为就是这里搞死服务的,那现在看起来应该不是,远端没有握手,destory掉就是了,应该不影响进程,搞不清是哪里死掉了,在看看日志吧,感谢回复

要回复问题请先登录注册