关于数据压缩,请问是否能够动态改变websocket传输的数据类型,比如二进制和文本同时支持

daming

gatewayworker里面看到:
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
$connection->websocketType = Workerman\Protocols\Websocket::BINARY_TYPE_ARRAYBUFFER;
}
如果启用gzip压缩,则这里设置成BINARY_TYPE_ARRAYBUFFER,不过设置后,就变成这个用户的连接永久都是这个传输类型了,对于小文本,几个字符串的那种,想着就没必要gzip压缩了,请问是否能够在传输小文本的时候,动态改变这个$connection->websocketType,变为默认的UTF8字符串传输呢?传输大文本如几十KB那种,再通过gzip压缩,动态设置为BINARY_TYPE_ARRAYBUFFER
另外如果可以动态改变的话,请问如何操作,使得H5页面js,能够做到这种通讯呢?
还请各位高手能够指点一下,谢谢~

3129 3 0
3个回答

blogdaren

开两个不同的gateway,分别监听不同的端口,即对应了不同的 $connection->websocketType.

  • 暂无评论
superchangme

BINARY_TYPE_ARRAYBUFFER本身也是可以传输json的
你在web客户端转一下就可以
var dataStrJson = String.fromCharCode.apply(null, new Uint8Array(e.data));
var data = JSON.parse(dataStrJson);

  • 暂无评论

怎么解析服务器端发送的过来的数据呢? Binary Frame (Opcode 2)

年代过于久远,无法发表回答
🔝