javascript - socket.io 如何从客户端获取参数?

标签 javascript node.js sockets express socket.io

我在服务器端有以下代码:

var io = socket(server);

io.on('connection', function(socket){
    console.log('made socket connection with ID:', socket.id);
});

这是我的理解。

我们在服务器端创建一个套接字并将其(实例?)传递给 io.然后,我们说 io.on('connection') ,它表示监听连接事件。我们还创建了一个回调函数,将套接字传递给该函数。

我不明白回调函数(套接字)部分。我们在哪里传递它的套接字?在客户端我有这个

var socket = io.connect('http://localhost:4000');

我知道将建立连接并且它将开始监听,但是我们如何以及在哪里从客户端调用该函数?

最佳答案

我们没有调用回调,因此我们没有向它传递任何东西。您无法从客户端调用服务器端函数。

回调由 JavaScript 的事件循环调用(并给出参数),由 socket.io 库的内部触发 - 更具体地说,据我所知,在 Engine.io 中:

Server.prototype.handshake = function (transportName, req) {
  ...
  self.emit('connection', socket);
  ...
};

这是通过 Node 的原生 EventEmitter 完成的,这使您可以 register a callback对于事件 ( io.on('connection', function(socket) { ... }) ),和 emit the event包含回调数据( self.emit('connection', socket) )。随事件发射传递的数据是为发射器对象上的事件注册的任何回调接收的数据。

因此,流程大致如下:

  • 服务器端,您为 connection 注册一个回调处理程序Engine.io 对象上的事件(通过 Socket.io 的 socket 函数传递给您)。
  • 客户端,您调用 connect功能。它启动一个 Websocket 请求。
  • 服务器端,Engine.io 接收 Websocket 请求。它创建了一个 socket对象来表示与该特定客户端的连接,然后发出 connection事件,与 socket对象作为附带数据。
  • connection事件会导致调用为该事件注册的所有处理程序,并传递随附的数据(socket 对象),您的函数就在其中。

关于javascript - socket.io 如何从客户端获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292622/

相关文章:

javascript - 使用 D3 画笔进行细粒度事件处理

node.js - Vue定义index.html文件在哪里

javascript - 在 MongoJS 中检索日期

c#屏幕共享效率

javascript - 在 JavaScript 中查找两个日期数组之间的差异

javascript - 在语义 UI React 表单输入中仅允许数字

node.js - 使用 ES6 和默认创建的模型关联(模型与模型无关)

c++ - ZeroMQ 消息破坏数据

node.js - socket.io 连接在生产环境中失败,在 localhost 中工作

javascript - 使用 Webpack 的上下文和条目时无法解析模块