【问题标题】:Is socket.io emit callback appropriate?socket.io 发出回调合适吗?
【发布时间】:2013-12-18 17:22:31
【问题描述】:

最近我一直在玩socket.io,发现了一个有趣的东西,我可以像这样发出函数回调。

我开始像这样在客户端发射:

client.emit('eventToEmit', dataToEmit, function(error, message){
    console.log(error);
    console.log(message);
});

然后我可以像这样从服务器端触发回调:

client.on('eventToEmit', function(data, callback){
    console.log(data);
    callback('error', 'message');
});

一切正常,没有错误,但我很感兴趣,如果这样做是合适的,因为到目前为止我在文档或任何示例中都没有看到类似的东西。

【问题讨论】:

  • 还要注意确认函数只能调用一次。
  • 还要注意,没有“超时”功能,所以当你的代码依赖于调用确认函数时要小心。另外,如果您有兴趣,请查看我创建的模块作为此问题的解决方法npmjs.com/package/timeout-callback
  • @JakubKnejzlik 你能把那个模块添加到 github 并给它一个许可证,这样它就可以使用了吗?
  • @Dodekeract 很高兴听到有人想使用它。完成:)

标签: node.js callback socket.io emit


【解决方案1】:

这是完全合法的。

这些回调被称为“确认函数”,并在in the Wiki 上进行了简要提及,并在NPM page 上进行了更详细的描述(“获取确认”)。

编辑:可以在here找到更多最新文档。

【讨论】:

  • 在这些链接中没有提到“确认”一词:(这些链接消失了吗?还是被隐藏了?
  • 也许帖子太旧了,因为没有一个链接提供答案,最后一个甚至坏了。
  • @arnold socket.io 网站似乎离线 atm。
  • 我一直在尝试解决这个问题,但没有成功。我的代码看起来与 socket.io 网站上的服务器代码完全一样,但它根本不起作用。我仍在试图弄清楚作为第二个参数传递的内容,但它绝对不是回调,因为尝试使用它作为一个回调会使服务器崩溃。
  • 嗯。好的。我正在使用 socket.io iOS 客户端库,所以我不确定我是否正确地做事。我正在尝试向服务器发送消息并立即获得响应。有谁知道在互联网上使用服务器节点代码和 iOS 客户端的任何示例?
【解决方案2】:

根据socket.emit()documentation,确认函数(回调)必须是socket.emit()调用的最后一个参数。我遇到了服务器代码中回调为null 的问题。
确保回调是socket.emit()的最后一个参数

例如

// correct
socket.emit('eventname', arg1, arg2, callback);

// incorrect
socket.emit('eventname', arg1, callback, arg2);

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2013-03-14
    • 2011-10-09
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多