Node.js Socket.io回调函数参数混淆
我不确定我是否理解套接字的服务器端配置Node.js Socket.io回调函数参数混淆,node.js,websocket,socket.io,yeoman,Node.js,Websocket,Socket.io,Yeoman,我不确定我是否理解套接字的服务器端配置 var app = express(); var server = require('http').createServer(app); var socketio = require('socket.io')(server, { serveClient: config.env !== 'production', path: '/socket.io-client' }); 这里,代码根据api引用创建一个与http服务器“连接”的套接字服务
var app = express();
var server = require('http').createServer(app);
var socketio = require('socket.io')(server, {
serveClient: config.env !== 'production',
path: '/socket.io-client'
});
这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
socket.address = socket.handshake.address !== null ?
socket.handshake.address.address + ':' + socket.handshake.address.port :
process.env.DOMAIN;
socket.connectedAt = new Date();
// Call onDisconnect.
socket.on('disconnect', function () {
onDisconnect(socket);
console.info('[%s] DISCONNECTED', socket.address);
});
// Call onConnect.
onConnect(socket);
console.info('[%s] CONNECTED', socket.address);
});
};
问题:“socket”变量是服务器的还是客户端的?如果是服务器的,那么socket.join(房间)为什么工作?(客户端已添加到文件室)如果它是客户端的,那么为什么它必须侦听“创建”事件。(客户端发出名为“创建”的事件以更改文件室。)
最后,我被下面代码中的三个“套接字”弄糊涂了
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
});
这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
socket.address = socket.handshake.address !== null ?
socket.handshake.address.address + ':' + socket.handshake.address.port :
process.env.DOMAIN;
socket.connectedAt = new Date();
// Call onDisconnect.
socket.on('disconnect', function () {
onDisconnect(socket);
console.info('[%s] DISCONNECTED', socket.address);
});
// Call onConnect.
onConnect(socket);
console.info('[%s] CONNECTED', socket.address);
});
};
webSocket连接(socket.io构建在其之上)都是通过首先建立HTTP连接从客户端启动的。因此,必须有一个可用于socket.io连接的HTTP服务器。这就是socket.io的初始化需要HTTP连接的原因。通常,该web服务器也充当普通web服务器,因此可以用于这两个目的。这简化了跨源问题,因为所有浏览器都允许所有客户端连接到提供其网页的同一源。如果您还没有其他web服务器,socket.io可以创建自己的服务器
问题:“socket”变量是服务器的还是客户端的
它是表示到特定客户端的连接的服务器端对象。Socket.io在客户端上有一个Socket对象,表示与服务器的客户端连接,在服务器上有一个Socket对象(对于每个单独的客户端连接),表示与特定客户端的连接
因此,如果要向特定客户机发送数据,请使用表示该客户机的socket
对象,然后执行以下操作:
socket.emit(msg, data);
如果是服务器的,那么socket.join(房间)为什么工作
这是因为这个socket
对象表示与特定客户机的连接。它是一个服务器端对象,但特定于特定的客户端(例如,每个客户端连接都有一个不同的对象)
最后,我被下面代码中的三个“套接字”弄糊涂了
socketio
表示整个socket.io模块,是执行全局命令的方式。在本例中,您正在执行一个全局命令来侦听任何新连接的客户端
当您获得连接
事件时,该事件的参数是新创建的套接字
对象(表示与特定客户端连接的服务器端对象)
socket.on('create',…)
是从客户端发送到服务器的create
消息的侦听器。因此,这行代码表示监听从这个特定(新连接的)客户机发送的create
消息,当消息到达时,调用回调并将消息中发送的数据(在本例中为房间名称)传递给它
socket.join(房间)
line使用与上述相同的socket
,并将其连接到服务器上的特定房间
这里,代码根据api引用创建一个与http服务器“连接”的套接字服务器。什么是附件
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
socket.address = socket.handshake.address !== null ?
socket.handshake.address.address + ':' + socket.handshake.address.port :
process.env.DOMAIN;
socket.connectedAt = new Date();
// Call onDisconnect.
socket.on('disconnect', function () {
onDisconnect(socket);
console.info('[%s] DISCONNECTED', socket.address);
});
// Call onConnect.
onConnect(socket);
console.info('[%s] CONNECTED', socket.address);
});
};
webSocket连接(socket.io构建在其之上)都是通过首先建立HTTP连接从客户端启动的。因此,必须有一个可用于socket.io连接的HTTP服务器。这就是socket.io的初始化需要HTTP连接的原因。通常,该web服务器也充当普通web服务器,因此可以用于这两个目的。这简化了跨源问题,因为所有浏览器都允许所有客户端连接到提供其网页的同一源。如果您还没有其他web服务器,socket.io可以创建自己的服务器
问题:“socket”变量是服务器的还是客户端的
它是表示到特定客户端的连接的服务器端对象。Socket.io在客户端上有一个Socket对象,表示与服务器的客户端连接,在服务器上有一个Socket对象(对于每个单独的客户端连接),表示与特定客户端的连接
因此,如果要向特定客户机发送数据,请使用表示该客户机的socket
对象,然后执行以下操作:
socket.emit(msg, data);
如果是服务器的,那么socket.join(房间)为什么工作
这是因为这个socket
对象表示与特定客户机的连接。它是一个服务器端对象,但特定于特定的客户端(例如,每个客户端连接都有一个不同的对象)
最后,我被下面代码中的三个“套接字”弄糊涂了
socketio
表示整个socket.io模块,是执行全局命令的方式。在本例中,您正在执行一个全局命令来侦听任何新连接的客户端
当您获得连接
事件时,该事件的参数是新创建的套接字
对象(表示与特定客户端连接的服务器端对象)
socket.on('create',…)
是从客户端发送到服务器的create
消息的侦听器。因此,这行代码表示监听从这个特定(新连接的)客户机发送的create
消息,当消息到达时,调用回调并将消息中发送的数据(在本例中为房间名称)传递给它
socket.join(房间)
line使用与上述相同的套接字
,并将其连接到服务器上的特定房间。非常感谢!你的解释太棒了!非常感谢你!你的解释太棒了!