0

做一些 socket.io 工作。好像我的发出回调没有被触发。我做对了吗?

this.logger.debug("joining room " + roomId);      
callback = function() {
  return this.logger.debug('finished emitting join for socket');
};
// this.config.ioTypes.join resolves to "j"
this.socket.emit(this.config.ioTypes.join, { 
  user: this.config.user,
  room: roomId
}, callback);

我的日志看起来是正确的(请注意,上面的代码不包括会生成这些日志的所有内容):

DEBUG: joining room 1245 <-- first line from code above
DEBUG: join event for socket etQIXGAm59DYkCPk1_gj 
DEBUG: data: { user: 1, room: '1245' }             
DEBUG: received join event for 1, data: { user: 1, room: '1245' }

这就是结束。看起来 socket.io 没有调用我的回调。但是文档很清楚:

有时,您可能希望在客户端确认消息接收时获得回调。

为此,只需将函数作为.sendor 的最后一个参数传递.emit。更重要的是,当您使用 时.emit,确认由您完成,这意味着您还可以传递数据:

我在这里做错了吗?

4

1 回答 1

0

我自己想出来的。将把它留在这里,因为文档对这个不是很清楚。

我曾经在服务器端(coffeescript) util.inspect(arguments)看到进入我的处理程序的内容:on

  @logger.debug "onJoin args: " + util.inspect(arguments)

结果是:... '2': [Function: ack]这看起来像我需要的。所以我将它添加到on处理程序的签名中。然后我添加callback() if callback?到处理程序的末尾。到目前为止看起来不错。

于 2013-02-28T19:14:12.953 回答