【发布时间】:2017-02-10 06:57:55
【问题描述】:
我有一个使用 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.io doco,它会注入占位符并在另一个请求中发送二进制文件。所以这对我来说还不错。
我有一个用于测试查询的 HTML/Javascript 测试客户端,它的原始请求如下所示:
socket.emit('listProjects', function (data) {
writeToScreen('<span style="color: blue;">Ack: ' + data + '</span>');
});
在控制台中生成日志显示:
[Log] engine.io-client:socket socket receive: type "message", data "61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]" +6ms (socket.io.js, line 1)
[Log] socket.io-parser decoded 61-0[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]] as {"type":6,"attachments":1,"nsp":"/","id":0,"data":[null,[{"id":{"_placeholder":true,"num":0},"name":"Test project"}]]} +6ms (socket.io.js, line 1)
[Log] engine.io-client:socket socket receive: type "message", data "ArrayBuffer" +1ms (socket.io.js, line 1)
[Log] socket.io-client:socket calling ack 0 with [null,[{"id":{},"name":"Test project"}]] +0ms (socket.io.js, line 1)
[Log] Data: null (Tester.html, line 55)
基本上,emit 的 ack 参数返回一个空值。我至少会认为它将设置为控制台中显示的数据。即使它有一个空的id 值。
有人知道我做错了什么吗?
【问题讨论】:
-
你没有显示代码,所以我不确定,但是......你不应该写
socket.on('listProjects', function (data) ...等吗?只是猜测;) -
谢谢,但没有。
on(用于响应传入事件。我想发送一个事件并立即收到同步响应。
标签: socket.io