gatewayworker 二进制ws首次建立连接发文异常

0

描述:
使用gatewayWorker部署ws服务端,businessWorker在发出数据到gateway的时候,先进行 gzip 压缩,然后再发送。


问题:
客户端首次建立连接的时候,出现服务器端发送的首次数据,类型为Text,而不是Binary类型。
(附件中红色方框 内容为 Text的,属于异常的情况)


相关gateway代码、Events代码


//gateway启动文件的 二进制传输设置
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
$connection->websocketType = Workerman\Protocols\Websocket::BINARY_TYPE_ARRAYBUFFER;
};
};

//Events模块 简要相关的地方

class Events
{
public static function onWorkerStart($businessWorker)
{
//process_timeout
$businessWorker->processTimeoutHandler = function ($trace_str, $exception) use ($businessWorker) {
\Workerman\Worker::log($trace_str);
return true;
};
}

public static function onConnect($client_id)
{
$group_name = 'rate_group';
//获取(客户端需要的)初始化数据
$rateData = self::getExRate();
$json_data = json_encode(['type' => $group_name, 'data' => $rateData]);

//发送gzip数据(此处就是附件图片出现 Text 的情况)
if (!empty($json_data)) {
$gzip_msg = gzencode($data);
Gateway::sendToClient($client_id, $gzip_msg);
}

//订阅频道
Gateway::joinGroup($client_id, $group_name);
}
error.png correct.png
已邀请:

walkor

赞同来自: jackyxie

onConnect是TCP连接建立是执行,onWebSocketConnect是TCP连接建立完毕完成websocket握手后执行。
所以Events::onConnect先执行,然后才执行onWebSocketConnect,所以Events::onConnect里业务逻辑发送数据的时候gateway一侧$connection->websocketType = Workerman\Protocols\Websocket::BINARY_TYPE_ARRAYBUFFER; 可能还没执行到。


gateway.php 里onConnect改成如下试下:


//gateway启动文件的 二进制传输设置
$gateway->onConnect = function($connection)
{
$connection->websocketType = Workerman\Protocols\Websocket::BINARY_TYPE_ARRAYBUFFER;
};

要回复问题请先登录注册