【问题标题】:How does socket.io get arguments from the client?socket.io 如何从客户端获取参数?
【发布时间】:2018-06-25 19:59:40
【问题描述】:

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

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 node.js sockets express socket.io


    【解决方案1】:

    我们没有调用回调,所以我们没有传递任何东西。您不能从客户端调用服务器端函数。

    回调由 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))。与事件发射一起传递的数据是为发射器对象上的事件注册的任何回调接收到的数据。

    因此,流程大致如下:

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

    【讨论】:

    • 哇。谢谢。这就是答案(听起来很复杂。也许我需要更多的基础课程)
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2015-10-06
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多