都看了论坛的问答,发现GatewayWorker不支持动态发送二进制数据,把项目卡住了 有没有什么解决办法啊
什么叫动态发送二进制数据?
根据请求发送
根据请求发送二进制或者text
你前端通过什么区分服务端发来的数据是二进制?
前端来接收文件,数据要二进制的
class Events { public static function ArrayBufferPack($buffer) { $len = \strlen($buffer); $first_byte = "\x82"; if ($len <= 125) { $encode_buffer = $first_byte . \chr($len) . $buffer; } else { if ($len <= 65535) { $encode_buffer = $first_byte . \chr(126) . \pack("n", $len) . $buffer; } else { $encode_buffer = $first_byte . \chr(127) . \pack("xxxxN", $len) . $buffer; } } return $encode_buffer; } public static function onMessage($client_id, $message) { Gateway::sendToAll(static::ArrayBufferPack(json_encode($new_message)), null, null, true); } }
像上面这样加一个ArrayBufferPack方法,在需要发送websocket二进制数据的时候, 1、用ArrayBufferPack打包数据。 2、send方法的raw参数传true (每个send方法如sendToUid sendToGroup等都有个raw参数)
在不需要发送二进制数据的时候,还是按照之前的方式发送(不能ArrayBufferPack打包,也不要传raw参数)
太感谢了 我去试一试
什么叫动态发送二进制数据?
根据请求发送
根据请求发送二进制或者text
你前端通过什么区分服务端发来的数据是二进制?
前端来接收文件,数据要二进制的
像上面这样加一个ArrayBufferPack方法,在需要发送websocket二进制数据的时候,
1、用ArrayBufferPack打包数据。
2、send方法的raw参数传true (每个send方法如sendToUid sendToGroup等都有个raw参数)
在不需要发送二进制数据的时候,还是按照之前的方式发送(不能ArrayBufferPack打包,也不要传raw参数)
太感谢了 我去试一试