Node.js 在断开连接事件时不发送套接字

2023-11-25

当有人连接到节点服务器时,我会保留一个包含所有套接字的数组。 这样我就可以在需要时向每个人广播消息,或者循环用户来计算在线用户的数量等。

所有这些工作正常,但是当触发断开连接事件时,我在参数中没有收到套接字。 还有另一种方法可以知道哪个套接字刚刚断开连接吗?

var allClients = [];

io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function(socket) {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      delete allClients[i];
   });
});

当然,上面的示例不起作用,因为断开连接事件没有给出套接字参数(或任何其他参数)。 那么,在套接字仍然存在的情况下,在断开连接之前是否还会触发另一个事件?

Ali


您已经拥有套接字,因为断开连接处理程序是在“连接”事件范围内声明的。尝试删除传递给“断开连接”处理程序的参数,您应该能够使用连接处理程序中的套接字参数。

io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function() {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      delete allClients[i];
   });
});

除此之外,您不需要套接字数组来进行广播,您可以使用房间对套接字进行分组并向该房间内的所有套接字进行广播。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 在断开连接事件时不发送套接字 的相关文章

随机推荐

  • 如何从命令行定义 gradle 中的 teamcity['build.number'] 属性

    有没有办法从命令行定义 teamcity build number 属性 我尝试了 Pteamcity build number 1 但它不起作用 我有一个 build gradle 文件 其中包含此任务 distTar baseName
  • 如何获取安卓锁屏壁纸?

    我使用下面的代码来检索 Android 8 1 手机上的 Android 锁屏壁纸 WallpaperManager manager WallpaperManager getInstance getActivity ParcelFileDe
  • OnPageChangeListener alpha 交叉淡入淡出

    关于 Android 中的交叉淡入淡出有很多问题 但它们都包含动画 我的问题是关于使用 ViewPager 的 OnPageChangeListener 进行交叉淡入淡出 我有一个 ViewPager 它可以有无限数量的视图 但实际上使用大
  • 我的云运行服务如何调用其他云运行服务?

    我有一个服务正在监听 https myapp a run app dosomething 但我想利用 Cloud Run 的可扩展性功能 因此在 dosomething 的控制器中 我向 https myapp a run app smal
  • 获取给定 System.Type 的结构的大小

    给定一个结构体MyStruct 我可以使用以下方法获取该结构实例的大小sizeof MyStruct 在不安全的代码中 但是 我想获取给定结构的大小Type结构体的对象 即sizeof typeof MyStruct 有Marshal Si
  • MYSQL - 无法连接到“localhost”上的 MYSQL 服务器 (10061)

    我已经在我的电脑上安装了 wamp 服务器 它没有互联网或内联网连接 Windows XP 操作系统 但是当我访问MYSQL时会弹出这个错误 你能告诉我如何解决这个错误吗 非常感谢 无法连接到 localhost 上的 MYSQL 服务器
  • 构建应用程序时 Xcode 错误:第 7 行:/resources-to-copy-Project.txt:权限被拒绝

    当我尝试在 Xcode 中构建 cordova 应用程序时 出现以下错误 Users User PhpstormProjects project project app platforms ios Pods Target Support F
  • 需要归档CLLocation数据

    我有一个数组CLLocation我想要存档的数据 应该NSUserDefaults系统可以用吗 否则 如何最好地归档CLLocation data 要正确存储 CLLocation 而不会丢失信息 请使用 NSKeyedArchiver 如
  • 如何从同一模块中的类名字符串获取类对象?

    我有课 class Foo def some method pass 还有另一个班级在同一个模块中 class Bar def some other method class name Foo Can I access the class
  • 未解决的外部符号错误仅发生在 64 位模式中,而不是在 32 位构建中

    我有一个 VC 代码 使用 VS2008 构建 它使用了一些静态库 在编译时静态链接的 lib 文件 为了便于理解 我们将我的 EXE 代码称为 AAA EXE 并将 lib 文件称为 A lib b lib 等 AAA EXE代码和静态库
  • php 发送带有附件的电子邮件

    我似乎找不到我编写的这个应该发送带有附件的电子邮件的 php 函数的问题 我已经为此挣扎了很长一段时间 function myMail to subject mail msg filename contentType random hash
  • 由于用空格扩展变量而导致的 Grep 错误

    我有一个名为 physics 1b sh 在 bash 中 如果我尝试 x physics 1b grep string x sh grep 抱怨 grep physics 1b No such file or directory 然而 当
  • 使用 Ruby on Rails 安排发送电子邮件任务的最佳方式是什么?

    我想安排一项日常任务 每天早上 7 点 我希望发送一封电子邮件 无需人工干预 我正在研究 RoR 框架 我想知道最好的方法是什么 我听说过 BackgrounDRB OpenWFEru 调度程序或基于 Cron 的东西 但我是新手 不明白哪
  • Oracle SQL 在包含数据时将列类型从 number 更改为 varchar2

    我在 Oracle 11g 中有一个表 包含数据 我需要使用 Oracle SQLPlus 执行以下操作 目标 更改列的类型TEST1在表中UDA1 from number to varchar2 建议的方法 备份表 将列设置为空 改变数据
  • CKEditor 插入 HTML

    我有数据库中的数据 在我的 js 文件中 我想更改 CKEditor 文本编辑器的值 我的值是原始 html 我希望将此原始值写入空的 CKEditor 文本编辑器 我尝试了这些 但总是出现未定义的函数错误 CKEDITOR instanc
  • java编译中出现未检查或不安全操作错误? [复制]

    这个问题在这里已经有答案了 我正在完成学校的实验作业 并在编译时收到此错误 程序运行良好 有点想修复导致错误的原因 程序代码和完整错误如下 一如既往的感谢 错误 注意 F Java Lab 8 Lab8 java 使用未经检查或不安全的操作
  • Android 中 Activity 的服务回调

    我有一个正在运行的后台服务和一个与该服务交互的客户端 当客户端请求某些操作时 服务会执行该操作并将结果发送回活动 客户端 我知道如何调用活动中的服务方法 并使用回调我们可以实现我想要做的事情 但我无法理解Api demos remotese
  • 为什么Android模拟器的编号是5554

    这可能是一个完全开箱即用的问题 我只是想知道为什么Android模拟器的编号是5554 5556这样的 Android 模拟器使用网络与 Android SDK 工具进行通信 即使此通信仅限于本地主机 这允许安装应用程序 调试等 当您启动模
  • 以编程方式检索 Google Sheets 单元格边框样式

    有可能set the 范围边框样式和颜色 现在的问题是 我们怎样才能get以编程方式设置边框样式 我正在寻找类似的东西 var ss SpreadsheetApp getActiveSpreadsheet var sheet ss getS
  • Node.js 在断开连接事件时不发送套接字

    当有人连接到节点服务器时 我会保留一个包含所有套接字的数组 这样我就可以在需要时向每个人广播消息 或者循环用户来计算在线用户的数量等 所有这些工作正常 但是当触发断开连接事件时 我在参数中没有收到套接字 还有另一种方法可以知道哪个套接字刚刚