gpt4 book ai didi

Socket.IO订阅多个 channel

转载 作者:行者123 更新时间:2023-12-02 21:38:22 27 4
gpt4 key购买 nike

我想在 Socket.IO 之上构建一个简单的聊天室系统,用户可以在其中创建一个新的聊天室,然后人们就可以开始聊天。

这听起来很简单,但作为我现在正在运行的 Socket.IO 0.9.4,在阅读了一些 SO 帖子以及 socket.io 上的文档后,我越来越困惑。因此,我希望有人可以向我提供与 0.9.4 配合使用的说明:

  1. 我需要一种订阅房间的方法。房间名称由用户选择。当消息在房间中发布时,用户应该收到它。服务端代码怎么写,客户端代码怎么写?

  2. 一个用户可以同时加入多个房间。

  3. 我希望另一个系统向某个房间中的所有用户发送消息。这个“另一个系统”通过 Express 处理的请求发送消息。我该如何编写该请求处理程序?

最佳答案

使用 socket.io rooms 功能,这一切都非常简单。查看 LearnBoost wiki 上的文档。

https://github.com/LearnBoost/socket.io/wiki/Rooms

它允许通过一个 socket 连接到多个房间。我使用以下代码进行了快速测试。

服务器

io.sockets.on('connection', function(client){
client.on('subscribe', function(room) {
console.log('joining room', room);
client.join(room);
})

client.on('unsubscribe', function(room) {
console.log('leaving room', room);
client.leave(room);
})

client.on('send', function(data) {
console.log('sending message');
io.sockets.in(data.room).emit('message', data);
});
});

客户端

 var socket = io.connect();
socket.on('message', function (data) {
console.log(data);
});

socket.emit('subscribe', 'roomOne');
socket.emit('subscribe', 'roomTwo');

$('#send').click(function() {
var room = $('#room').val(),
message = $('#message').val();

socket.emit('send', { room: room, message: message });
});

从 Express 路由发送消息也非常简单。

app.post('/send/:room/', function(req, res) {
var room = req.params.room
message = req.body;

io.sockets.in(room).emit('message', { room: room, message: message });

res.end('message sent');
});

关于Socket.IO订阅多个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com