我不确定我是否了解套接字的服务器端配置。
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(room)的工作原理是什么? (客户端被添加到一个房间)如果它是客户端,那么为什么它必须听'创建'事件。(客户端发出一个名为create的事件来改变房间。)
总结一下,我对以下代码中的三个'socket'感到困惑。
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
});
答案 0 :(得分:4)
这里,代码创建了一个套接字服务器"附加"根据api参考与http服务器。什么是附件?
webSocket连接(其中socket.io构建在其上)通过首先建立HTTP连接从客户端启动。因此,必须有一个可用于socket.io连接的HTTP服务器。这就是为什么socket.io的初始化需要HTTP连接的原因。通常,该Web服务器也充当普通的Web服务器,因此可以用于这两个目的。这简化了跨源问题,因为所有浏览器都将所有客户端连接到其网页所在的相同源。如果您还没有其他网络服务器,socket.io可以创建自己的服务器。
问题:这里,' socket'变量是服务器或客户端?
服务器端对象表示与特定客户端的连接。 Socket.io在客户端上有一个套接字对象,表示与服务器的客户端连接,它在服务器上有一个套接字对象(对于每个单独的客户端连接),表示与特定客户端的连接。
因此,如果您想将数据发送到特定客户端,请使用代表该客户端的socket
对象,并执行以下操作:
socket.emit(msg, data);
如果是服务器,那么socket.join(会议室)的工作原理是什么?
这是有效的,因为此socket
对象表示与特定客户端的连接。它是服务器端对象,但它特定于特定客户端(例如,每个客户端连接都有不同的对象)。
总结,我对三个插座感到困惑。在以下代码中。
socketio.on('connection', function (socket) {
socket.on('create', function(room) {
console.log('joining a room');
socket.join(room);
console.log('socket joined room: ', room);
});
});
socketio
表示整个socket.io模块,它是您执行全局命令的方式。在这种情况下,您正在执行全局命令以侦听任何新连接客户端。
当您收到connection
事件时,该事件的参数是新创建的socket
对象(表示与特定客户端的连接的服务器端对象)。
socket.on('create', ...)
是从客户端发送到服务器的create
消息的侦听器。因此,这行代码表示要侦听从此特定(新连接的)客户端发送的create
消息,并且当该消息到达时,调用回调并将随消息一起发送的数据传递给它(在这种情况下是一个房间)名称)。
socket.join(room);
行使用与上述相同的socket
并将其加入服务器上的特定会议室。