Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在发送Socket.io额外占位符帧_Javascript_Sockets_Websocket_Socket.io_Network Programming - Fatal编程技术网

Javascript 正在发送Socket.io额外占位符帧

Javascript 正在发送Socket.io额外占位符帧,javascript,sockets,websocket,socket.io,network-programming,Javascript,Sockets,Websocket,Socket.io,Network Programming,以下代码生成神秘的第三帧: 451-[“clientMsg”,“{u占位符”:true,“num”:0}] 古董 服务器 客户 上面的代码产生了三个帧,我希望只有两个帧,一个从客户端到服务器,一个从服务器到客户端。有人能解释第三个框架是什么,以及如何摆脱它吗?请参见屏幕截图: 查看socket.io的代码,它看起来就像任何时候有一个包含二进制数据的对象,它都会用这个占位符事件替换该部分对象。然后,它按照提供的“num”字段的顺序发送二进制数据,并在客户端重新构造 由于只有一个对象要为事件“cli

以下代码生成神秘的第三帧:
451-[“clientMsg”,“{u占位符”:true,“num”:0}]

古董 服务器 客户 上面的代码产生了三个帧,我希望只有两个帧,一个从客户端到服务器,一个从服务器到客户端。有人能解释第三个框架是什么,以及如何摆脱它吗?请参见屏幕截图:


查看socket.io的代码,它看起来就像任何时候有一个包含二进制数据的对象,它都会用这个占位符事件替换该部分对象。然后,它按照提供的“num”字段的顺序发送二进制数据,并在客户端重新构造

由于只有一个对象要为事件“clientMsg”发送,因此它会将占位符对象作为整个正文发送事件,并带有二进制数据的后续内容

请参阅socket.io解析器的binary.js:-特别是
\u deconstructPacket
\u recostructPacket
函数


不幸的是,我还意识到添加二进制代码的开销相当大,除了代码之外,我找不到其他文档。

这方面有什么进展吗?是的,socket.IO就是这样将二进制消息映射到服务器上的on(message)事件的。这对我们来说开销很大,所以我们在服务器上切换到WebSocket(ws),在客户端切换到本机WebSocket。我们还使用schemapack发送二进制数据,这使得二进制消息的编码、解码和路由非常容易:有趣的@JaredSprague由于易于集成,我们默认使用msgpack lite,但我现在将查看schemapack,谢谢。至于减少开销,我们正在研究webrtc,因为浏览器中可能存在udp风格的不可靠消息传递
function sendMessage() {
    var bufArr = new ArrayBuffer(4);
    var bufView = new Uint8Array(bufArr);
    bufView[0]=6;
    bufView[1]=7;
    bufView[2]=8;
    bufView[3]=9;

    // send binary message to server
    socket.emit('serverMsg', bufArr);
}
sendMessage();
socket.on('serverMsg', function (bufArr) {
    var ba = new ArrayBuffer(4);
    var bv = new Uint8Array(ba);
    bv[0]=10;
    bv[1]=11;
    bv[2]=12;
    bv[3]=13;

    var bufView = new Uint8Array(bufArr);
    console.log("Data: ", bufView[0], bufView[1], bufView[2], bufView[3]);

    // Send message back to client
    socket.emit("clientMsg", ba);
});
socket.on('clientMsg', function (bufArr) {
    var bufView = new Uint8Array(bufArr);
    console.log("Data: ", bufView[0], bufView[1], bufView[2], bufView[3])
});