我想使用socket.io来实现多个聊天,我可以使用一个socket.room来实现一对一聊天,但是我想创建多个套接字来与多个人并行聊天
下面是我在git中获得的示例,但我无法理解它如何用于多次聊天,任何人都可以解释
服务器端
io = socketio.listen(server);
// handle incoming connections from clients
io.sockets.on('connection', function(socket) {
// once a client has connected, we expect to get a ping from them
saying what room they want to join
socket.on('room', function(room) {
socket.join(room);
});
});
// now, it's easy to send a message to just the clients in a given
room
room = "abc123";
io.sockets.in(room).emit('message', 'what is going on, party
people?');
// this message will NOT go to the client defined above
io.sockets.in('foobar').emit('message', 'anyone in this room yet?');
客户端
// set-up a connection between the client and the server
var socket = io.connect();
// let's assume that the client page, once rendered, knows what room
it wants to join
var room = "abc123";
socket.on('connect', function() {
// Connected, let's sign-up for to receive messages for this room
socket.emit('room', room);
});
socket.on('message', function(data) {
console.log('Incoming message:', data);
});
答案 0 :(得分:-1)
想象一下,有多个聊天室的用户可以选择。当他单击特定房间时,将获得该房间的信息:在本例中为ChatRoom1。 客户端套接字(属于单击此会议室的用户)必须首先加入此会议室 →所以这就是为什么:
socket.emit(room, ChatRoom1)
//另一方面,服务器端会将此客户端的套接字ID添加到该房间:
socket.on('room', function(room) {
socket.join(room);
});
现在,如果要向属于特定房间的所有套接字发出消息,请在服务器部分上使用以下命令:
io.sockets.in(ChatRoom1).emit('message', 'what is going on, party
people?');
→实际上,此命令只是向所有属于ChatRoom1的套接字发送一条消息
→基本上,一个房间只是一个socketId数组
现在在客户端,您有了这个:
socket.on('message', function(data) {
console.log('Incoming message:', data);
});
这只是一个侦听器,您将进入控制台日志: 传入消息:发生什么事了,聚会的人?
您很快就会进入聊天室,您的套接字会加入一个会议室,并会监听每个事件,直到您要求套接字离开会议室为止
因此,现在您可以想象,在您的消息中,您将拥有自己的ID,您的房间ID和您的内容,在发送时,服务器将知道将其发送到何处。
示例: 信息: { 内容:“ blabla”, 用户:我, 日期:现在, RoomId:ChatRoom1 }
每次用户发送消息时,在客户端上: socket.emit('sendMessage',消息)
在服务器端:
socket.on('sendMessage', function(message){
io.sockets.in(message.RoomId).emit('message', message);
})