繁体   English   中英

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

[英]How does socket.io get arguments from the client?

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

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 ,它允许您注册事件的回调io.on('connection', function(socket) { ... }) ),并使用回调的数据发出事件self.emit('connection', socket) )。 与事件发射一起传递的数据是在发射器对象上为该事件注册的任何回调接收的数据。

因此,流程大致如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM