如何正确关闭 Node.js TCP 服务器?

2024-01-09

我在 Google 或 SO 上找不到明确的答案。

我认识一个net.Server实例有一个close方法不允许更多客户端进入。但它不会断开已连接的客户端。我怎样才能做到这一点?

我知道如何使用 Http 来完成此操作,我想我是在问它与 Tcp 是否相同或是否不同。

对于 Http,我会做这样的事情:

var http = require("http");

var clients = [];

var server = http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("You sent a request.");
});

server.on("connection", function(socket) {
    socket.write("You connected.");
    clients.push(socket);
});

// .. later when I want to close
server.close();
clients.forEach(function(client) {
    client.destroy();
});

Tcp 也一样吗?或者我应该做些什么不同的事情?


由于没有提供答案,以下是如何在 Node.js 中打开和(硬)关闭服务器的示例:

创建服务器:

var net = require('net');

var clients = [];
var server = net.createServer();

server.on('connection', function (socket) {
    clients.push(socket);
    console.log('client connect, count: ', clients.length);

    socket.on('close', function () {
        clients.splice(clients.indexOf(socket), 1);
    });
});

server.listen(8194);

关闭服务器:

// destroy all clients (this will emit the 'close' event above)
for (var i in clients) {
    clients[i].destroy();
}
server.close(function () {
    console.log('server closed.');
    server.unref();
});

Update:自从使用上面的代码以来,我遇到了一个问题close将使端口保持打开状态(Windows 中为 TIME_WAIT)。由于我有意关闭连接,因此我使用unref https://nodejs.org/api/net.html#net_server_unref因为它似乎完全关闭了 tcp 服务器,尽管我不是 100% 如果这是关闭连接的正确方法。

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

如何正确关闭 Node.js TCP 服务器? 的相关文章

  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • Web 组件 - 服务/非 html 组件

    所以我来自 Angular 想看看如何创建vanilla Web components 现在 从 Angular 开始 我们倾向于将事物分开 组件 充当 HTML CSS 和一些 javascript 然后是 服务 主要负责收集数据和执行不
  • Chrome 扩展同步调用 - 仅在窗口关闭后创建窗口

    我有这个代码 function voteNewWindow mailNum chrome windows create url http www google com incognito true function window conso
  • 启用/禁用由用户输入确定的复选框

    我有一个简单的表单 用户可以在其中输入他的联系号码 如果联系号码以 07 开头 则该复选框已启用 其他我需要禁用它的复选框 我已经编写了一些代码 但我面临的问题是 当用户键入 01 时 它会被禁用 但如果他们继续在 01 之后添加任何其他数
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 一次更新猫鼬中的多个文档

    我有一个用户文档数组 每个用户都有关注者属性 它是一个数字 我只想将此属性增加 1 然后立即更新数据库中的所有这些用户文档 更多细节 在请求中 我有一组用户 id 我使用这些 id 进行查询以获取一组用户文档 const users awa
  • Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306

    我正在尝试使用 Docker 容器启动并运行我的 Nodejs 应用程序 我不知道可能出了什么问题 当我使用控制台调试凭据时 凭据似乎已正确传递 另外启动sequel pro并使用相同的用户名和密码直接连接似乎也可行 当节点在容器中启动时
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • Phantom-node模块无法加载外部资源

    我正在开发一个nodejs服务器 它将发布的html呈现为pdf png或jpg https github com svenhornberg pagetox https github com svenhornberg pagetox ser
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 从节点服务器访问 Google Calendar API

    由于某种原因 我很难访问 Google 日历 我希望能够在 Node js 服务器的日历中添加和删除事件 我从文件中发现了非常矛盾的信息 我跟着 https developers google com identity protocols
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • 强制输入数字小数位

    我想强制

随机推荐

  • Java在运行时加载外部类

    我还有另一个问题 但我无法找到答案 我希望在运行时从外部 jar 中获取一个类 并从中获取一个方法并向其传递一个参数 我下面的代码当前打开 jar 并获取该类并运行该方法 但是当我尝试向其传递参数时 该方法会运行 但我得到一个 Invoca
  • 获取“从客户端检测到潜在危险的 Request.Path 值 (&)”

    我有一个 REST 服务 当我尝试调用一个具有 REST 服务的项目时 在它的名字中 我得到了上面的错误 如果我没有编码 这将是有意义的 所以这是我的电话 http localhost 57851 myService Servers myS
  • 根据下一行是否是组行绘制自定义 NSTableRowView

    我有一个习惯NSTableRowView实现显示我的数据单元格 该表还包含使用简单的组行NSTextField 在我的自定义行视图中 我需要稍微更改底部分隔符的绘图 具体取决于下面的下一行是数据单元格 即我的自定义行 还是组标题 对于组标题
  • 动态更改 setInterval 值

    我想动态更改 setInterval 的间隔值 由于 setInterval 回调函数中存在循环 我正在苦苦挣扎 我在stackoverflow上看到了太多问题 但没有任何解决方案可以帮助我 如果有人知道答案 请举例说明 谢谢 这是我的代码
  • 如何使用我的私人 dart 包而不显示在 pub dart lang 上?

    由于我的公司协议 我不想将 dart 包发布到 pub 如何仅将我的 dart 包用于我的公司而不显示在 pub dart lang 上 我查过这个链接https github com dart lang pub issues 1050 h
  • 将 css 变量与 scss 变暗和变亮过滤器一起使用

    我想使用scsslighten and darken CSS4 的函数var 像这样 box shadow inset 0px 2px 50px 45px darken var colorbtn 20 看起来不行 gulp这样写 Error
  • 在我的情况下如何膨胀活动?

    我想实现这样的布局 我的主要活动布局 main xml 请鼠标右键点击以下图片查看图片 我又做了一个内容活动 内容设置为内容 one xml 应该用作上述布局的一部分 右侧部分 我知道我可以通过以下方式膨胀布局 LinearLayout m
  • 在会话中访问数组变量(CodeIgniter)

    我有一个名为 config 的数组 我正在尝试从会话中的数组中回显变量 我试过了 echo this gt session gt userdata config item 但它不起作用 我这里的语法有什么问题吗 我已经打印了我的会话 并且这
  • 词干提取会损害文本分类的精度吗?

    我读到词干提取会损害准确性 但会提高文本分类的召回率 这是怎么发生的 当您进行词干提取时 您会增加查询和示例文档之间的匹配数量 对吗 总是一样的 如果你提高回忆 你就进行了概括 因此 你会失去精确度 将单词词干合并在一起 一方面 应该合并在
  • WCF Silverlight 服务返回自定义错误,但 HTTP 500 响应不是 200

    看来我一直在为 Silverlight WCF 服务中的自定义错误而烦恼 所以我会很高兴尽力买啤酒任何人都可以帮我解决这个问题 经过一番痛苦之后 我终于让我的 WCF 服务抛出自定义错误 ParameterValidationFault 并
  • 激活器:未找到命令

    我正在尝试在我的 Linux 系统中安装 activator 所以首先我安装java sudo add apt repository ppa webupd8team java sudo apt get update sudo apt get
  • Android源码框架修改重建但在模拟器中生效

    我修改 framework base services core java com android server am ActivityManagerService java一些 logcat 输出字符串 我尝试使用不同的方法来重建它 ma
  • 如何将 UIImage 序列化为 JSON?

    我在用 imageData UIImagePNGRepresentation imgvw image 并在发帖时 dic setObject imagedata forKey image after NSData data NSJSONSe
  • TensfoFlow:线性回归损失随着连续纪元的增加(而不是减少)

    我正在学习 TensorFlow 并尝试将其应用于简单的线性回归问题 data是形状为 42x2 的 numpy ndarray 我有点困惑为什么在每个连续的纪元之后损失都在增加 损失不是会随着每个连续的纪元而减少吗 这是我的代码 如果您也
  • SQL Server 2012 连接字符串:无法再找到服务器?

    我刚刚安装了 VS2012 pro RC 和 SQL server Express 2012 我去运行我的应用程序 但收到此错误 连接字符串中的数据源值指定 SQL Server 的实例 那个没有安装 要解决此问题 您可以选择安装 SQL
  • 如何在创建文件的过程中显示进度条?

    如何在创建 PDF 文件时单击按钮时显示进度条 并在创建文件完成后隐藏进度条 public class TwoFragment extends android support v4 app Fragment private View v I
  • 从类调用表单时的 StackOverflow

    我得到了StackOverflowException当我从课堂上调用表格时 In my MainForm我打电话给Youtube cs使用这个类 Youtube yt new Youtube 然后在我的Youtube我称之为MainForm
  • 使用逗号格式化为数字 JSF

    如何在 JSF 中格式化值
  • WCF 序列化异常 - NetDataContractSerializer

    我在尝试将数据集合发送到我们的服务时遇到错误 然而 如果我只向集合中添加一个项目 那么它就可以正常工作 一旦我添加超过一项 我就会收到以下错误 NetDataContractSerializer 不支持使用 SmartTrade Share
  • 如何正确关闭 Node.js TCP 服务器?

    我在 Google 或 SO 上找不到明确的答案 我认识一个net Server实例有一个close方法不允许更多客户端进入 但它不会断开已连接的客户端 我怎样才能做到这一点 我知道如何使用 Http 来完成此操作 我想我是在问它与 Tcp