为什么 io.emit() 在 process.on() 中不起作用?

2024-04-08

我正在尝试申请this https://stackoverflow.com/questions/14031763/doing-a-cleanup-action-just-before-node-js-exits这样我的服务器就会在关闭时告诉客户端。我不明白为什么服务器不会发出。看起来程序在有机会发出之前就关闭了,但是 console.log() 可以工作。我认为我的问题可能与前面提到的 process.on 的同步性质有关here https://nodejs.org/api/process.html#process_event_exit,但老实说,我不太了解(a)同步在这种情况下的真正含义。另外,如果有帮助的话,我使用的是 Windows 7。

  // catch ctrl+c event and exit normally
  process.on('SIGINT', function (code) {
    io.emit("chat message", "Server CLOSED");
    console.log("Server CLOSED");
    process.exit(2);
    });

我今天才开始搞这些东西,所以请原谅我的无知。任何帮助是极大的赞赏!

完整的服务器代码。 http://pastebin.com/enUegWm9


io.emit()是一个异步操作(你可以说它在后台工作)并且由于各种TCP优化(也许比如Nagle的算法),你的数据可能不会立即发送。

process.exit()立即生效。

在消息通过 TCP 成功发送和确认之前,您可能会关闭应用程序及其拥有的所有资源。

一种可能的解决方法是执行process.exit(2)稍有延迟,使 TCP 堆栈有机会在关闭之前发送数据。

另一种可能性是避免最后一条聊天消息。客户端很快就会发现与服务器的连接已关闭并且无法重新连接,因此无论如何都应该向用户显示该信息(在服务器崩溃的情况下)。

您还可以考虑关闭 Nagle 算法,该算法会在发送数据之前尝试等待一小会儿,以防您立即发送更多可以合并到同一个数据包中的数据。但是,要知道这是否可靠地工作,您必须在适当的平台上进行相当彻底的测试,并且即使关闭此功能也可能无法解决问题,因为这是 TCP 堆栈之间发送其缓冲数据的竞争以及关闭该进程拥有的所有资源(包括打开的套接字)。

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

为什么 io.emit() 在 process.on() 中不起作用? 的相关文章

  • 如何使用nodeJS SFTP客户端列出所有子目录?

    有趣的节点 JS ssh2 sftp client 我想列出给定路径中的所有目录及其子目录 let sftp new ssh2SftpClient console log sftp sftp connect host xx xxx xxx
  • angularjs 自定义过滤器检查数据数组内的值

    我有两个过滤器 它们根据数据中的队列键过滤数据 这是我的代码 var app angular module app app controller mainController function scope Data object scope
  • Jqplot 中两个系列数据的不同颜色条

    我想知道如何在 Jqplot 中为两个系列制作不同的颜色条 如果我只有一个系列数据 它的工作原理如下图所示 红色和绿色基于其值 但是 如果我有两个系列数据 我无法为每个系列数据配置两个系列颜色 目前我只能做这个图 我希望两个系列图可以根据其
  • Object.assign() - 奇怪的行为需要解释

    我有这个代码 function margeOptions options passedOptions options Object assign options passedOptions let passedOpts a true let
  • Vue js按钮冻结dom

    我试图在按下按钮时切换包含加载动画的跨度 直到使用 v if 函数完成 但是当我按下按钮时 DOM 冻结并且 span 元素保持不变 直到函数调用结束 如何让 DOM 不冻结并显示加载图标 非阻塞按钮按下可能是一个解决方案 HTML
  • 将参数传递给 jquery 单击事件中的回调函数[重复]

    这个问题在这里已经有答案了 直接进入正题 我有一个 jquery 事件监听器 如下所示 number click printNumber 和一个回调函数 function printNumber number console log num
  • Angular 7 Guard 重定向仅适用于双击

    问题是我已经实现了一个 Guard 旨在处理特定的目录 如果当前用户名的角色等于 2 它应该返回 true 如果没有 那么它不应该重定向 这是我的 app routing module ts 文件 问题出在 userlist 路径中 我们是
  • React.js this.props.data.map() 不是一个函数

    我正在搞乱反应并尝试解析和渲染 json 对象 现在 我只是使用硬编码对象设置它以进行测试 而不是从 ajax 调用中获取它
  • 如何正确关闭 Node.js Express 服务器?

    我需要在收到回调后关闭服务器 auth github callback网址 与平常一样HTTP API http nodejs org docs latest api http html关闭 服务器目前支持server close call
  • JQuery _renderItem 没有被调用

    我正在尝试使用 renderItem 函数创建自定义 ui menu item 元素 但经过可能尝试后 我什至无法调用该函数 自动完成功能正在工作 但就像 renderItem 函数不存在一样 这是我的脚本部分
  • 函数声明或函数表达式

    我刚刚在块作用域中定义函数时遇到了问题 考虑以下程序 try greet function greet alert Merry Christmas catch error alert error 我希望这个程序能够发出警报Merry Chr
  • 如何混淆或使 JavaScript 文件不可读?

    我的应用程序中有 JavaScript 脚本 其中包含 JavaScript 和 jQuery 函数 所有用户与我的应用程序的交互都是动态的 并且通过 jQuery 传递到应用程序 我意识到 当我在客户端运行我的应用程序时 客户端可以通过查
  • 如何让无限滚动发挥作用?

    我正在尝试让这个无限加载脚本在我的项目中工作 这是我的 HTML div div div class pagina div div class pagina div div class pagina div div class pagina
  • Node.js:将 repl 挂接到远程节点服务器

    假设我有一个节点服务器在 mysite com 上运行 有没有办法设置该服务器以便我可以使用节点的repl api http nodejs org docs latest api repl html to securely从我的本地计算机连
  • 是否可以从 webpack 中的文件名中删除特殊字符?

    长话短说 我的资产文件名中不能包含某些字符 例如连字符 我没有运气通过解析 webpack 文档来弄清楚是否可以使用正则表达式或类似的东西重命名文件 这样我就可以从我无法控制源文件名的 3rd 方包中删除任何连字符 我的超级天真的例子是这样
  • 在 HTML5 画布上创建颜色选择器

    如何在 HTML5 画布上绘制颜色选择器 一个基本的例子是使用getImageData http jsfiddle net eGjak 60 http jsfiddle net eGjak 60 var ctx cv get 0 getCo
  • Node.js :带有多个查询参数的 Express app.get

    我想查询 yelp api 并有以下路线 app get yelp term term location location yelp listPlaces 当我发出 GET 请求时 http localhost 3000 yelp term
  • 使用 Passport-jwt 授权 jwt 令牌时获取 401 未经授权的状态

    成功登录后 我获得了 jwt 令牌 现在要访问受限 api 我正在发送授权标头 但我总是收到 401 未经授权 我已经提到过这个使用 Passport jwt 验证节点 API https stackoverflow com q 35528
  • 相当于 JavaScript 中 Ruby 的each_cons

    许多语言都曾提出过这个问题 但 javascript 却没有 Ruby 有方法Enumerable each cons https devdocs io ruby 2 5 enumerable method i each cons看起来像这
  • 通过jquery ajax()和serialize()提交html表单

    我想通过 jquery ajax 提交此表单 这是我所做的 但它不起作用 即表单正在提交并刷新页面 但我没有看到响应 即在同一页面上打印数组 HTML

随机推荐

  • 我到底必须在 viewDidUnload 中做什么?

    我倾向于在 dealloc 中释放我的东西 现在 iPhone OS 3 0 引入了这个有趣的 viewDidUnload 方法 他们说 释放所有保留的子视图 主要视图 例如自我我的出口 零 因此 当视图控制器的视图从内存中启动时 view
  • Pandas - 按一列分组,按另一列排序,从第三列获取值

    我想采用 pandas 数据框 按一列对其进行分组 按另一列对其进行排序 并从第三列中获取第一个元素并填充原始数据框 这是我原来的 df 我将按 col 1 分组 按 col 2 升序 排序 并从 col 3 中取出第一个元素并用结果填充
  • 对角线穿过视图

    根据某些条件 我必须对角剪切列表单元格 为此 我使用以下代码制作了对角线可绘制图像 对角线 xml
  • 沿多边形边界随机采样点

    I am trying to randomly sample points on a polygon boundary made of arbitrary number of points The polygon consist of a
  • C++中的默认参数

    考虑以下 int foo int x int z 0 int foo int x int y int z 0 如果我像这样调用这个函数 foo 1 2 编译器如何知道使用哪一个 它不会 因此这个例子不会编译干净 它会给你一个编译错误 它会给
  • Cardview 涟漪效应不起作用

    最小 SDK 为 21 当我单击回收器适配器中的卡片视图时 不会发生连锁反应 只会转到下一个屏幕 recyclerview 位于片段内
  • JDBC 无法加载数据源的工厂类

    我已经遇到这个问题好几天了 但没有设法解决它 我使用的是 tomcat 7 0 我完全无法连接 mysql 数据库 我正在编写的应用程序是一个使用eclipse IDE的jsp动态网站 TomCat 7 启动时出现此错误 WARNING F
  • 为什么 Z3 在这个简单的输入上返回“未知”?

    这是输入 set option auto config false set option mbqi false declare sort T6 declare sort T7 declare fun set23 T7 T7 Bool ass
  • 在 Aptana Studio 3 中禁用 CSS 验证

    有人知道如何使用 Aptana Studio 3 禁用 CSS 验证吗 在版本 3 0 4 中 即使完全完成后 警告仍然存在禁用 W3C CSS 验证器 https stackoverflow com questions 6652793 h
  • 在最近的 JVM 中,不可见引用仍然是一个问题吗?

    我正在读书Java 平台性能 http java sun com docs books performance 1st edition html JPAppGC fm html 遗憾的是 自从我最初提出这个问题以来 该链接似乎已经从互联网上
  • Tensorflow中GRU单元的解释?

    以下是 Tensorflow 的代码GRUCell单元显示了当先前的隐藏状态与序列中的当前输入一起提供时获得更新的隐藏状态的典型操作 def call self inputs state scope None Gated recurrent
  • Microsoft 认知服务视觉 API ClientException 错误

    我正在尝试使用视觉认知服务来接收图像的描述 但我的代码总是抛出此异常 Exception Microsoft ProjectOxford Vision ClientException HResult 0x80131500 Origine
  • SQL Server 2017 - 如何在动态 SQL 内的 SELECT 中传递参数

    我创建了下表 CREATE TABLE TestABC colID INT NOT NULL colName VARCHAR 10 NULL INSERT INTO TestABC colID colName VALUES 1 ABC 2
  • 尝试关联条目时,序列化多对多失败并显示“不关联到”?

    我的 Sequelize 多对多配置有问题 它抱怨说site article keyword is not associated to article keyword 下面的代码代表一个最小的测试用例 试图理解我做错了什么 我希望提供更小的
  • 如何判断共享库加载到进程地址空间中的位置?

    我正在尝试调试一个共享库 其中有使用 gdb 的源代码和调试符号 我没有实际使用此共享库的进程的调试符号或代码 我自己编译它 所以我可以拥有一切 但生成的二进制文件被剥离 以模拟我没有代码的情况 该进程打印我正在尝试调试的目标函数 foo
  • Azure 移动服务、自定义 API、更新输出,然后选择返回空结果

    当该行明确更新时 以下 results length 始终为 0 exports get function request response var mssql request service mssql var sql declare t
  • MADlib apt 安装,如何?

    MADlib 是 PostgreSQL 最完整 最高效 功能更快 最可靠的数学库 官方下载 http madlib incubator apache org download html没有关于 Debian 或 UBUNTU 即插即用安装
  • 有没有办法找出实例被杀死的原因?

    我有一个小型 java 应用程序 2 10 qps 它设置为使用 F4 1G 实例自动缩放 有趣的是 虽然通常只有一个实例真正处于活动状态 但通常会创建两个实例 有时 几个小时后 一个实例就会消失 并立即被另外 1 2 个实例取代 相应的实
  • 什么是 C++ 技术规范?

    Concepts lite C 提案 N3701 功能未包含在 C 1y 标准中 但据说它将作为技术规范发布 它究竟意味着什么 它会自动成为下一个 C 版本的标准功能吗 我通常不喜欢复制粘贴答案 但我认为它解释得很好here http is
  • 为什么 io.emit() 在 process.on() 中不起作用?

    我正在尝试申请this https stackoverflow com questions 14031763 doing a cleanup action just before node js exits这样我的服务器就会在关闭时告诉客户