Node.js ws 包上的正确错误处理

2024-04-12

我正在努力将基于 REST 的数据管道替换为基于 Websocket 的数据管道,但我无法找到所有可能出错的地方。该系统是生产系统,因此如果出现故障并且无法恢复,将会发生非常糟糕的情况。这是我到目前为止所得到的:

客户端

  • let server = new Websocket(path, opts)
    • 将其包裹在try-catch会发现程序员错误,例如不正确的 URL,但操作错误(例如服务器未正确响应)似乎无法捕获,因为它们是异步的并且没有回调
  • server.send(data, cb)
    • 将其包裹在try-catch将捕获类型错误,通常是程序员错误
    • 在这里添加回调(function (err) { handleErr(err); }) 是一个很好的包罗万象的操作错误,因为回调将有一个非空err如果由于任何原因发送失败,则会进行处理
  • server.on('error', cb)
    • 在这里添加回调似乎是一个好主意,因为error活动是其中的一部分EventEmitter规范,但我实际上还没有发现任何东西
  • Heartbeat Checks (verbose, but described here https://github.com/websockets/ws#how-to-detect-and-close-broken-connections)
    • 这是由ws自述文件作为捕获静默连接失败的一种方法

服务器端

  • server.on('connection', function(connection) {...})
    • Trying connection.send('test', function(err) { handleErr(err); });是在尝试使用它之前确保连接不会以某种方式失败的好方法,但这可能不是必需的。另外,应该将其包裹在try-catch由于上述原因
  • server.on('error', cb)
    • 看起来是个好主意,原因与我在上面在客户端执行的原因相同

看起来就像是建立在ws考虑到生产是很困难的,因为没有地方记录所有可能出错的不同事情,并且使用像 Socket.io 这样对用户更友好的库会消除使用所寻求的许多性能优势ws。是否有关于使用时可能出错的所有不同事情的文档ws,或者至少是一个强化战斗的指南?我觉得部署这个东西只是一场赌博,任何时候我都可能被愤怒地叫到办公室去解决问题。


你应该捕获所有的错误error event.

let server = new Websocket(path, opts)
server.on('error', (error) => {
  //handle error
})

确保在创建连接之后以及对其运行任何操作之前立即调用此方法。否则回调将不会捕获任何错误并且将抛出异常。

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

Node.js ws 包上的正确错误处理 的相关文章

  • npm install 没有拉入 devDependency

    我有 npm v 1 2 32 当我跑步时 npm 安装 mongo migrate 它不安装 mongodb 这是一个 devDependency 我究竟做错了什么 虽然与这个问题没有直接关系 但有些人可能有兴趣知道如果环境变量NODE
  • Mongoose 查找 array.length 大于 0 的所有文档并对数据进行排序

    我正在使用 mongoose 对 MongoDB 执行 CRUD 操作 这就是我的架构的样子 var EmployeeSchema new Schema name String description type String default
  • 使用 NVM 安装多个版本的 node.js (Ubuntu)

    如何使用 Ubuntu 在 Ubuntu 中安装多个版本的 Node jsNVM https github com creationix nvm 先验知识 如何使用终端 例如 您可以使用gnome terminal 安装依赖项 sudo a
  • 如何从 Node.js 中的 Http.IncomingMessage 检测 http 与 https

    给定一个Http IncomingMessage由一个创建http s Server为了响应请求 检测请求是否是 http 与 https 的正确 推荐方法是什么 一些我不知道的随机想法是否正确 检查端口 seems wrong might
  • Flutter Websockets MacOS:相同的代码可以在调试模式下工作,但不能在发布模式下工作:“(操作系统错误:提供了节点名或服务名..)”

    Summary 我有一个在 Flutter 中使用 WebSockets 的程序 该程序在debug模式 但运行相同exact代码在release模式会导致错误 Context Flutter 文档告诉我们如何使用 WebSocket ht
  • npm install 不起作用,抛出错误

    我正在尝试在 nodejs 中安装 yo 和其他一些软件包 但是我不断收到错误 我是节点新手 所以我有点迷失 我运行的是 Mac OS X 10 10 3 我正在使用的命令是 sudo npm install global yo 这样做会给
  • http模块和express模块​​有什么区别?

    我正在学习 NodeJs http www tutorialspoint com nodejs http www tutorialspoint com nodejs 我无法理解使用 http 模块 get post 方法 与使用expres
  • AJAX 发送数据到 Node.js 服务器

    我尝试使用 AJAX 将数据发送到 Node js 服务器 但不断遇到同样的问题 即接收问题 这是客户端 JavaScript AJAX 代码 var objects function return new XMLHttpRequest f
  • Node.js Async/Await 模块导出 [重复]

    这个问题在这里已经有答案了 我对模块创建有点陌生 想知道 module exports 并等待异步函数 例如 mongo connect 函数 完成并导出结果 在模块中使用 async await 正确定义了变量 但是当尝试通过要求模块来记
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • 以异步方式执行 Express res.render

    我有一个 Nodejs 应用程序 其中res renderExpress 方法以阻塞方式花费大约 400 毫秒 我如何处理它以非阻塞方式执行 我的 apache 基准测试需要 12 秒来执行大约 30 个并发请求 我如何以更好的方式实施这一
  • Node.js:读取 URL 中传递的参数

    在 Rails 中 我向服务器发出 POST 请求 response Typhoeus Request post http url localtunnel com request from ola to ole result JSON pa
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • Node 不断恢复到旧版本

    每次我在控制台中重新启动 vagrant 时 它都会询问我的登录详细信息 然后说Now using node v7 10 0 npm v4 2 0 当我做run nvm install node I get v13 11 0 is alre
  • 函数不会等到 Promise 得到解决

    我正在开发一个简单的不和谐机器人 我正在尝试打印有关某个玩家的一些一般数据 我最近了解了 async await 并尝试将其实现到我的代码中 然而 它似乎不起作用 因为当我第一次触发此代码时 它会打印 null 但在后续触发时 它将打印正确
  • 使用 Express.js 和 NodeJS,您可以通过响应正文中的重定向发送 JSON

    我正在尝试通过 302 重定向发送 JSON 在 ExpressJS 中这可能吗 API 声明可以添加主体res json 例如 res json 302 name larry 在接收端 重定向的目的地 主体是空的 这是一些示例代码 发送应

随机推荐

  • C:无法在文件上写入数据

    我想打开一个文件 在上面写一些数据 所以我必须使用 Fopen 我不能使用open 因为我在其他一些事情上需要fopen 现在 如果我想使用 fwrite 在文件上写入 我不知道为什么这就是我在代码 option1 中提到的内容 但是如果我
  • sql 查询中的错误“)”附近的语法不正确

    insert into p article client detail current article id sector detail id select article id 2818 from select article id fr
  • Solr Custom RequestHandler - 注入查询参数

    简短的问题 我正在寻找一种方法 java 来拦截对 Solr 的查询并注入我的业务逻辑提供的一些额外的过滤参数 我应该使用什么结构 语境 首先 我要坦白一点 对于 Solr 我是个菜鸟 对我来说 设置一个服务器 定义一个模式 编写一个功能性
  • 如何将 templatefile 函数传递给 Terraform 0.12 中 EC2 资源的 user_data 参数?

    我需要通过以下templatefile功能为user data在 EC2 资源中 谢谢 用户数据 tf templatefile path module init ps1 environment var env hostnames dev
  • 在R中合并多个栅格

    我一直在尝试找到一种省时的方法来在 R 中合并多个光栅图像 这些是来自乞力马扎罗南部地区的相邻 ASTER 场景 我的目标是将它们放在一起以获得一张大图像 这是我到目前为止得到的 对象 ast14dmo 代表 RasterLayer 对象列
  • 使用node.js核心zlib模块压缩成.zip文件

    如何压缩一个或多个文件并将其保存到 zip包含所提供的 node js 的扩展文件zlib https nodejs org api zlib html模块 我想出了如何保存到 gz使用 gzip 如下 const gzip zlib cr
  • 堆叠子图的对齐

    EDIT 我找到了自己的答案 见下文 如何在子图中对齐图像 for ax in axes ax set anchor W EDIT END 我有一些用 imshow 绘制的数据 它在 x 方向上很长 因此我通过在垂直堆叠的子图中绘制数据切片
  • 如何在 IntelliJ IDEA 中自定义 SonarLint 规则?

    是否可以让 SonarLint for IntelliJ IDEA 仅强制执行我在 Sonar 服务器上启用的规则 因为现在可以使用当前版本的 SonarLint 我使用的版本3 0 0 2041 https plugins jetbrai
  • Rust 中的函数是第一类对象吗?

    函数可以作为参数传递吗 例如 在 JavaScript 中 您可以将函数作为参数传递 如下所示 setInterval function 1000 他们是一流的 与 JavaScript 不同 Rust 有两种类型 函数和闭包 fn fir
  • 在 Clojure 中使用 http://foobar.mp3 重定向到 http://fizzbar.mp3

    我正在尝试以编程方式下载 mp3 文件这个 RSS 提要 http podcast menlo church feed 当我打开一个网址时 例如 http menlohurch podbean com mf feed 5gv2gb 1702
  • 如何找到任何活动应用程序的闪烁光标位置?

    我正在为 Mac OS 开发一个应用程序 我想找到当前应用程序的文本光标 插入符号导航 的位置 到目前为止 我已经让它请求可访问权限 并且我也可以监视 keyEvents 但是如何找到闪烁的光标位置 我不是在寻找鼠标光标位置 我想要文本光标
  • 非实例化 C++ 模板函数的语义正确性

    以下 C 代码无法编译 例如使用 g 4 7 或 clang 3 2 struct Bar template
  • 如何在Python中的多个进程之间共享字典而无需锁定

    我需要在多个进程之间共享一个巨大的字典 大小约为 1 GB 但是因为所有进程都将始终从中读取 我不需要锁定 有没有办法在不锁定的情况下共享字典 python中的多处理模块提供了一个Array类 它允许通过设置共享而无需锁定锁 假然而 多处理
  • 什么是铁轨的良好伐木替代品?

    所以 我一直在研究登录我的 Rails 应用程序 我发现 感谢像这样的帖子this https stackoverflow com questions 462651 rails logger format string configurat
  • Laravel Echo - 允许访客连接到状态通道

    我正在使用 laravel echo server 运行 Laravel Echo 来广播事件 我有一个用户计数器频道 显示应用程序上的所有用户 为此 我使用了存在通道 这对于登录用户来说效果很好 但访客永远无法连接 我在 Broadcas
  • Xml序列化顺序问题

    通常 所有这些都非常适合将我的对象序列化为 Xml 字符串 然后再序列化回对象 然而 不同最终用户之间存在这种不一致 我似乎无法追踪 基本上 当我序列化一个对象时 一旦转换为 Xml 它看起来就像这样
  • 安卓。在对话框中调用关闭

    你打电话时dismiss 在对话框上 除了隐藏它之外 它还会将其从内存中删除吗 它是否会删除放置在对话框内的所有对象 例如ImageViews Buttons等等 凭记忆吗 有没有一种方法可以让我自己释放这些对象的内存 而不是等待垃圾收集器
  • 拖动未修饰的 JFrame 并调整其大小

    目前 我正在使用以下代码来拖动和移动未装饰的 JFrame private void initialiseGUI Component component
  • 使用不同的行终止符在Python中读取csv文件

    我有一个 CSV 格式的文件 其中分隔符是 ASCII 单位分隔符 行终止符是 ASCII 记录分隔符 显然 由于这些是非打印字符 我只是使用了此处编写它们的标准方法之一 我已经编写了大量读取和写入 CSV 文件的代码 因此我的问题不在于
  • Node.js ws 包上的正确错误处理

    我正在努力将基于 REST 的数据管道替换为基于 Websocket 的数据管道 但我无法找到所有可能出错的地方 该系统是生产系统 因此如果出现故障并且无法恢复 将会发生非常糟糕的情况 这是我到目前为止所得到的 客户端 let server