对象属性中包含二进制数据的socket.io ack
我有一个使用socket.io的node.js服务器。我返回的对象中有对象属性中包含二进制数据的socket.io ack,socket.io,Socket.io,我有一个使用socket.io的node.js服务器。我返回的对象中有id值。这个值是二进制的。目前我让socket.io处理这个问题,因为它声明它可以处理二进制值。请求的服务器日志如下所示: socket.io:socket sending ack [null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]]
id
值。这个值是二进制的。目前我让socket.io处理这个问题,因为它声明它可以处理二进制值。请求的服务器日志如下所示:
socket.io:socket sending ack [null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]] +7ms
socket.io:client writing packet {"id":0,"type":6,"data":[null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]],"nsp":"/"} +0ms
socket.io-parser encoding packet {"id":0,"type":6,"data":[null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]],"nsp":"/"} +8ms
socket.io-parser encoded {"id":0,"type":6,"data":[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]],"nsp":"/","attachments":1} as 61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]] +0ms
engine:socket sending packet "message" (61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]) +8ms
engine:socket flushing buffer to transport +0ms
engine:ws writing "461-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]" +0ms
engine:socket sending packet "message" (�������ۃ��Y��) +0ms
engine:socket flushing buffer to transport +1ms
engine:ws writing "�������ۃ��Y��" +0ms
socket.emit('listProjects', function (data) {
writeToScreen('<span style="color: blue;">Ack: ' + data + '</span>');
});
如果我正确理解socket.io doco,它将插入占位符并在另一个请求中发送二进制文件。所以在我看来这没问题
我有一个用于测试查询的HTML/Javascript测试客户端,它的原始请求如下所示:
socket.io:socket sending ack [null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]] +7ms
socket.io:client writing packet {"id":0,"type":6,"data":[null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]],"nsp":"/"} +0ms
socket.io-parser encoding packet {"id":0,"type":6,"data":[null,[{"id":{"type":"Buffer","data":[187,147,6,248,235,251,17,230,158,219,131,162,166,89,203,237]},"name":"Test project"}]],"nsp":"/"} +8ms
socket.io-parser encoded {"id":0,"type":6,"data":[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]],"nsp":"/","attachments":1} as 61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]] +0ms
engine:socket sending packet "message" (61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]) +8ms
engine:socket flushing buffer to transport +0ms
engine:ws writing "461-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]" +0ms
engine:socket sending packet "message" (�������ۃ��Y��) +0ms
engine:socket flushing buffer to transport +1ms
engine:ws writing "�������ۃ��Y��" +0ms
socket.emit('listProjects', function (data) {
writeToScreen('<span style="color: blue;">Ack: ' + data + '</span>');
});
基本上,emit
的ack参数返回空值。我认为至少它会被设置为控制台中显示的数据。即使它有一个空的id
值
有人知道我可能做错了什么吗?好吧,这是我的错。在服务器上,我使用承诺并使用标准的
函数(err,data)
调用进行响应。所以我的回答应该是:
socket.emit('listProjects', function (err, data) {
writeToScreen('<span style="color: blue;">Ack: ' + data + '</span>');
});
socket.emit('listProjects',函数(err,data){
writeToScreen('确认:'+数据+'');
});
您没有显示代码,因此我不确定,但。。。你不应该写socket.on('listProjects',function(data).
等等吗?只是猜测;)谢谢,但不是。on(
是用来响应传入事件的。我想发送一个事件并收到一个即时同步响应。