我在服务器端有以下代码:
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) { ... })
)进行register a callback,并为回调(self.emit('connection', socket)
)提供数据以emit the event。与事件发射一起传递的数据是在发射器对象上为该事件注册的任何回调接收的数据。因此,流程大致如下:
在服务器端,您为Engine.io对象上的
connection
事件注册了一个回调处理程序(由Socket.io的socket
函数传递给您)。在客户端,您调用
connect
函数。它启动一个Websocket请求。在服务器端,Engine.io接收Websocket请求。它创建一个
socket
对象来表示与该特定客户端的连接,然后发出connection
事件,并将socket
对象作为随附数据。connection
事件导致调用为该事件注册的所有处理程序,并传递随附的数据(socket
对象),您的函数就在其中。关于javascript - socket.io如何从客户端获取参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48292622/