gpt4 book ai didi

node.js - socket.io - 如何在命名空间上广播消息?

转载 作者:IT老高 更新时间:2023-10-28 21:53:27 25 4
gpt4 key购买 nike

根据socket.io示例:

To broadcast, simply add a broadcast flag to emit and send method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
socket.broadcast.emit('user connected');
});

我尝试将它与新的 socket.io namsepace 功能结合起来,所以我得到了这个:

var chat = ioserver.of('/chat');

chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
chat.send(msg);
});
});

这很好用,聊天 channel (而不是其他 channel )上的每个人都会收到消息。但发件人也得到它。所以我尝试执行以下操作:

chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
chat.broadcast.send(msg);
});
});

并得到一个异常:'无法调用未定义的方法'发送'。'好的,所以我想,广播是单个套接字的功能(虽然感觉有点奇怪 - 单个套接字如何广播到所有其他......)。 所以我尝试了:

chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.broadcast.send(msg);
});
});

但现在情况更糟 - 没有人收到消息,甚至发件人也没有。无论如何,这是我合乎逻辑的预期 - 一个套接字不能通过自身广播某些内容。这次也没有异常(exception),所以为socket定义了广播。

如果我这样做:

chat.on('connection', function (socket) {
console.log('chat connection');
socket.on('message', function (msg) {
console.log(msg);
socket.send(msg);
});
});

那么只有原始发送者才能收到消息,这又是很合乎逻辑的——我使用了与客户端相关的套接字的“发送”。

那么问题来了:使用广播功能的正确方法是什么?

可能是socket.io的开发者犯了一个错误,将广播功能添加到错误的对象(据我了解,它应该是命名空间的功能,但现在它只是为套接字定义的)?

最佳答案

似乎我能够在打开赏金后自己解决这个问题。对此感到抱歉。

无论如何,看看这是否有帮助:

chat.on('connection', function (socket) {
socket.on('message', function (msg) {
socket.emit(msg); // Send message to sender
socket.broadcast.emit(msg); // Send message to everyone BUT sender
});
});

但是,如果您不将其重新发送给发件人,则可以节省一些带宽并为用户创造更快捷的体验。只需将他们的消息直接添加到聊天日志中,并可选择使用仅使用自发来确认收到的消息没有问题。

关于node.js - socket.io - 如何在命名空间上广播消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477770/

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