javascript - Socket.io 传递回调函数

标签 javascript socket.io

我对这种情况下发生的事情感到困惑

客户:

socket.emit('ferret', 'tobi', function (data) {
  console.log(data); // data will be 'woot'
});

服务器:

io.on('connection', function (socket) {
    socket.on('ferret', function (name, fn) {
      fn('woot');
    });   
});

这是来自文档。将函数传递给服务器以进行回调有什么意义?服务器如何调用客户端函数?我很困惑。

最佳答案

很明显,您不能直接从服务器调用客户端上的函数。

不过,您可以轻松地间接执行此操作:

  1. 当客户端发送 ferret 消息时,它会在本地存储给定的函数和 ID。
  2. 客户端将此 ID 与消息一起发送到服务器。
  3. 当服务器想要调用客户端函数时,它会将带有 ID 和参数的特殊消息发回给该函数。
  4. 当客户端收到这个特殊消息时,它可以通过它的 ID 查找函数并调用它。

我不知道这是否正是 Socket.io 所做的,但可以合理地假设它与此类似。


编辑:查看源代码(herehere),这似乎确实与 Socket.io 所做的差不多。

关于javascript - Socket.io 传递回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562380/

相关文章:

javascript - 从局部变量加载 D3

javascript - Css jquery.each 只是一个做

javascript - 使用网络套接字检测页面退出

node.js - Flutter socket.io 连接到 Nodejs socket.io

javascript - 如何使用 sails.js 和 socket.io 进行在线游戏服务器端

jquery - Uncaught ReferenceError : io is not defined

javascript - socket.emit 不适用于移动 chrome(但它适用于隐身模式)

javascript - 仅将 CSS 类添加到那些没有 'title' 属性的链接

javascript - 无法在数据表中的模态中注册按钮单击

javascript - 如何知道 mousedown 事件是否发生在 Canvas 中我们想要的位置?