Socket.IO 确认与事件发出

Nik*_*ika 5 socket.io

我正在尝试构建基于房间管理(大厅、配对、房间等)的应用程序(更准确地说是我个人项目的库)。

我设法用 socket.io 做到了。

现在,我的问题是,我不知道应该使用什么样的设计模式。

我注意到 socket.io 有 ack 回调,这让我感到惊讶并认为它很好,但我不确定发送回带参数的 ack 或发出带参数的事件有什么区别。

那么,问题是,使用 ack 相对于发出事件有什么优缺点,反之亦然?

让我们说一下,使用以下代码有什么优点和缺点:

假设处理程序回调是fn(err, res);

致谢方式:

socket.on('join', function (data, ack) {
  // do the joining stuff here.
  return ack(null, { response: 'goes_here' });
});
Run Code Online (Sandbox Code Playgroud)

相对

事件发出风格:

socket.on('join', function (data, ack) {
  // do the joining stuff here.
  io.to(client_sid).emit('join_response', null, { response: 'goes_here' });
});
Run Code Online (Sandbox Code Playgroud)

Bal*_*zar 3

正如您所指出的,如果您只考虑乒乓球,那么并没有真正的区别。我认为显着的变化是它允许您验证特定事件是否已被确认(尽管您可能会争辩说您也可以通过_response传递事件 ID 来对事件执行此操作),并提供了一种更方便的方法来处理响应,通过使用简单的回调样式表示法:第一个示例看起来更干净、简单。

此外,它允许您避免仅为一种类型的事件创建两个事件键,这种事件有点重复。已为此目的做出确认,因此没有真正的理由不使用它来支持或创建另一个事件。