socket.io 发出回调合适吗?

Posted

技术标签:

【中文标题】socket.io 发出回调合适吗?【英文标题】:Is socket.io emit callback appropriate? 【发布时间】: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 很高兴听到有人想使用它。完成:) 【参考方案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);

【讨论】:

以上是关于socket.io 发出回调合适吗?的主要内容,如果未能解决你的问题,请参考以下文章

socket io 发出失败的回调

Android socket.IO中的Emit或Ack超时处理?

socket.io 中的 emit 方法的成功回调

socket.io 下的可靠消息传递?

Nest.js 中的 Socket.io 确认

Socket.io 如何判断某人何时离开