我在服务器端有以下代码:
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/