gpt4 book ai didi

node.js - 为什么我的 socket.emit 事件会多次触发(基于全局连接数)到同一个客户端?

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:20 25 4
gpt4 key购买 nike

下面是我处理动态分配的命名空间的代码。客户端连接,然后使用它的引荐来源网址查找客户端的帐户 ID,并且在下面未出现的函数中,如果该帐户 ID 尚未分配给它的命名空间,则会生成一个新的命名空间(UUID)或返回现有命名空间。

然后,该命名空间被发送到客户端,客户端依次在该特定命名空间上响应新的 connect 消息。

一切正常。

不幸的是,无论有多少客户端已连接,ns_socket.emit('hi'); 语句都会返回到 ns_socket。

需要明确的是,如果客户端 1 连接到命名空间,则 hi 会向该客户端触发一次。当客户端 2 连接到同一个命名空间时,hi 被第二个客户端触发两次,原因不明(对我来说),而它应该只触发一次。

显然,我们将不胜感激任何帮助。

var main = io.of('').on('connection', function(socket) {
socket.on('joinDynNs',function(data) {
var nameslug = socket.handshake.headers.referer.match(/(http(s)?:\/\/)([A-Za-z0-9-]+)\./)[3];
getActID(nameslug, function(actID) {
var ns = getNamespace(nS, actID);
socket.emit('assignNamespace',{ns:ns});
io.of('/' + ns).on('connection', function(ns_socket) {
ns_socket.emit('hi');
});
});
});
});

最佳答案

你的逻辑是这样写的,每当一个套接字连接到基本命名空间时,就会为命名空间创建一个连接处理程序。因此,每次新客户端连接到基本命名空间时,您都会设置另一个连接处理程序。换句话说,你在打电话

io.of('/' + ns).on('connection', function(ns_socket) {
ns_socket.emit('hi');
});

每次有新的连接进来时。连接处理程序并不特定于您正在处理的套接字;它会为命名空间上的任何新连接触发。这就是为什么您会看到不断增加的消息计数。

我不确定您的全部需求,但我认为 rooms对你来说会是一个更好的解决方案;命名空间实际上被设计用于多路复用连接(例如,多个完全不相关的应用程序在同一个 Socket.IO 端口上运行); rooms 允许您将套接字分组到逻辑组中,并向该组中的套接字发送消息。

关于node.js - 为什么我的 socket.emit 事件会多次触发(基于全局连接数)到同一个客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13599071/

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