对象属性中包含二进制数据的socket.io ack

对象属性中包含二进制数据的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"}]]

我有一个使用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"}]] +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(
是用来响应传入事件的。我想发送一个事件并收到一个即时同步响应。