首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

记一次nodejs问题排查

本文分为两个部分,首先通过nodejs源码分析这个错误产生的原因,然后通过网络工具抓包的方式捕获这个错误。...1 源码分析 我们从建立一个tcp连接成功后,nodejs执行的操作开始分析(net.js)。 ? 这是连接成功后执行的nodejs回调。回调里执行了新建一个socket表示和客户端通信的对象。...设置对应socket的错误信息为ECONNRESET,并设置状态为close。如果这时候用户执行read会怎样呢? ? read函数会直接把错误信息返回给调用方。...我们回到libuv中,当libuv调用read函数的时候,返回了错误码ECONNRESET。然后libuv执行nodejs的read_cb回调。...总结:本文分享了通过源码分析和实践的方式排查nodejs问题,通过源码我们能更了解问题的原因,通过工具可以验证我们的想法。

3K20

Nodejs进阶:核心模块net入门与实例讲解

模块概览 net模块是同样是nodejs的核心模块。...net.Socket:tcp/本地 socket的node版实现,它实现了全双工的stream接口。 本文从一个简单的 tcp服务端/客户端 的例子开始讲解,好让读者有个概要的认识。...接着再分别介绍 net.Server、net.Socket 比较重要的API、属性、事件。 对于初学者,建议把文中的例子本地跑一遍加深理解。...(备注:严格来说不应该把 net.Socket 叫做客户端,这里方便讲解而已) 单从node官方文档来看的话,感觉 net.Socket 比 net.Server 要复杂很多,有更多的API、事件、属性...相关链接 官方文档: https://nodejs.org/api/net.html#net_socket_destroy_exception 本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问

1.5K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Nodejs进阶:核心模块net入门与实例讲解

    模块概览 net模块是同样是nodejs的核心模块。...net.Socket:tcp/本地 socket的node版实现,它实现了全双工的stream接口。 本文从一个简单的 tcp服务端/客户端 的例子开始讲解,好让读者有个概要的认识。...接着再分别介绍 net.Server、net.Socket 比较重要的API、属性、事件。 对于初学者,建议把文中的例子本地跑一遍加深理解。...(备注:严格来说不应该把 net.Socket 叫做客户端,这里方便讲解而已) 单从node官方文档来看的话,感觉 net.Socket 比 net.Server 要复杂很多,有更多的API、事件、属性...相关链接 官方文档: https://nodejs.org/api/net.html#net_socket_destroy_exception 本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问

    61920

    【nodejs原理&源码赏析(5)】net模块与通讯的实现

    一. net模块简介 net模块是nodejs通讯功能实现的基础,nodejs中最常用的功能就是作为WebServer使用,建立服务器时使用的http.createServer就是在net.createServer...连接建立后,就可以实现通讯了。...客户端通讯套接字是net.Socket的实例,通过调用实例方法socket.connect(args)来和服务器建立连接,作为客户端通讯套接字时需要监听端口号,建立连接后,客户端server通过connection...\\pipe', process.cwd(), 'dashipc'); let socket = new net.Socket(); //子进程的socket连接主进程中监听的地址...首先主线程和子线程之间建立IPC通讯,连接建立后,由子进程将自己的pid通过socket发给主进程,这样主进程就知道连接到IPCserver的socket是哪个子进程连过来的了,demo在内部构建了一个

    1.3K50

    linux网络编程中的errno处理

    ,可以重新尝试接受连接EINTR:表示系统调用被中断,可以重新尝试接受连接EINVAL:表示套接字不支持接受连接操作,需要检查套接字是否正确其中 EINTR、EAGAIN与EWOULDBLOCK,表示可能遇到了系统中断...、EINTR 表示连接正在进行中,需要等待连接完成或重新尝试连接。...一般情况下,我们需要通过 select、poll、epoll 等 I/O 多路复用函数来等待连接完成,或者使用非阻塞的方式进行连接,等待连接完成后再进行下一步操作。...,需要等待下一次读写事件再尝试读写,非阻塞模式下可以继续尝试读写ECONNRESET 或 EPIPE:表示连接被重置或对端关闭了连接,需要重新建立连接ENOTCONN:表示连接未建立或已断开,需要重新建立连接...ETIMEDOUT:表示连接超时,需要重新建立连接ECONNREFUSED:表示连接被拒绝,需要重新建立连接EINVAL:表示套接字不支持读写操作,需要检查套接字是否正确其中 EINTR、EAGAIN

    5.6K30

    如何在Ubuntu 16.04上使用PM2和Nginx开发Node.js TCP服务器应用程序

    ssh sammy@your_server_ip 连接后,导航到tcp-nodejs-app目录: cd tcp-nodejs-app 在同一目录中,创建一个名为client.js的新文件: nano...将此代码添加到文件以使用端口7070上的IP地址127.0.0.1连接到服务器: const net = require('net'); const client = new net.Socket();...如果您的应用程序设置为侦听其他端口,请将代理传递URL端口更新为正确的端口号。...使用ufw来允许端口3000的连接: sudo sudo ufw allow 3000 假设您的Node.js应用程序正在运行,并且您的应用程序和Nginx配置正确,您现在应该能够通过Nginx反向代理访问您的应用程序...Client Example to connect to the Node.js TCP Server const net = require('net'); const client = new net.Socket

    1.5K30

    Nodejs进阶:http核心模块简介

    本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 http模块概览 大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。...正如官网所展示的,借助http模块,可以几行代码就搞定一个超迷你的web server。 在nodejs中,http可以说是最核心的模块,同时也是比较复杂的一个模块。...(fn),回调中的 socket 是个双工的stream接口,也就是说,读取发送方信息、向发送方发送信息都靠他。...备注:socket的客户端、服务端是相对的概念,所以其实 net.Server 内部也是用了 net.Socket(不负责任猜想) // 参考:https://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b...http.IncomingMessage 实现了 Readable Stream interface,参考这里 req.socket --> 获得跟这次连接相关的socket 本文摘录自《Nodejs

    62750

    Nodejs创建http客户端及代理服务器

    nodejs除了可以通过http模块创建服务器,还能创建客户端,类似于浏览器那样很轻松的去向别的服务器发送请求并获取响应数据。...port:用于指定目标服务器用于客户端连接的端口号。 localAddress:用于指定专用于网络连接的本地接口。 socketPath:用于指定目标Unix域端口。...http.ClientRequest对象的socket事件,指定的回调函数使用一个参数,参数值是用于分配的socket端口对象 clientRequest.on( "socket", function...() { clientRequest.abort(); // socket超时终止本次请求时触发的错误代码为ECONNRESET } ) } ) // 监听error...,充当一个代理服务器,例如用nodejs创建一个服务器,当这个服务器接收到前端网站请求后,就向企业服务器端请求数据,当它从企业服务器端数据接收到响应数据后,就可以再将响应数据发送给客户端。

    2.3K20

    Nodejs进阶:http核心模块简介

    http模块概览 大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。正如官网所展示的,借助http模块,可以几行代码就搞定一个超迷你的web server。...在nodejs中,http可以说是最核心的模块,同时也是比较复杂的一个模块。上手很简单,但一旦深入学习,不少初学者就会觉得头疼,不知从何入手。...(fn),回调中的 socket 是个双工的stream接口,也就是说,读取发送方信息、向发送方发送信息都靠他。...备注:socket的客户端、服务端是相对的概念,所以其实 net.Server 内部也是用了 net.Socket(不负责任猜想) // 参考:https://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b...http.IncomingMessage 实现了 Readable Stream interface,参考这里 req.socket --> 获得跟这次连接相关的socket 本文摘录自《Nodejs

    34840

    Nodejs进阶:http核心模块简介

    本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 http模块概览 大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。...正如官网所展示的,借助http模块,可以几行代码就搞定一个超迷你的web server。 在nodejs中,http可以说是最核心的模块,同时也是比较复杂的一个模块。...(fn),回调中的 socket 是个双工的stream接口,也就是说,读取发送方信息、向发送方发送信息都靠他。...备注:socket的客户端、服务端是相对的概念,所以其实 net.Server 内部也是用了 net.Socket(不负责任猜想) // 参考:https://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b...http.IncomingMessage 实现了 Readable Stream interface,参考这里 req.socket --> 获得跟这次连接相关的socket 本文摘录自《Nodejs

    73480

    Nodejs进阶:http核心模块简介

    http模块概览 大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。正如官网所展示的,借助http模块,可以几行代码就搞定一个超迷你的web server。...在nodejs中,http可以说是最核心的模块,同时也是比较复杂的一个模块。上手很简单,但一旦深入学习,不少初学者就会觉得头疼,不知从何入手。...(fn),回调中的 socket 是个双工的stream接口,也就是说,读取发送方信息、向发送方发送信息都靠他。...备注:socket的客户端、服务端是相对的概念,所以其实 net.Server 内部也是用了 net.Socket(不负责任猜想) // 参考:https://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b...http.IncomingMessage 实现了 Readable Stream interface,参考这里 req.socket --> 获得跟这次连接相关的socket 本文摘录自《Nodejs

    57730

    一文学会 Node.js 中的流

    流的处理方式非常独特,流不是像传统方式那样将文件一次全部读取到存储器中,而是逐段读取数据块并处理数据的内容,不将其全部保留在内存中。...例如,net.Socket Transform:可在写入和读取时修改或转换数据。例如在文件压缩的情况下,你可以在文件中写入压缩数据,也可以从文件中读取解压缩的数据。...这是一种模块方法,用于在流转发错误和正确清理之间进行管道传输,并在管道完成后提供回调。...流驱动的 Node API 由于它们的优点,许多 Node.js 核心模块提供了原生流处理功能,最值得注意的是: net.Socket 是流所基于的主 API 节点,它是以下大多数 API 的基础 process.stdin...返回连接到 stdin 的流 process.stdout 返回连接到 stdout 的流 process.stderr 返回连接到 stderr 的流 fs.createReadStream() 创建一个可读的文件流

    2.4K30

    浅析 NodeJS 多进程和集群

    实际上,fork 进程是昂贵的,复制进程的目的是充分利用 CPU 资源,所以 NodeJS 在单线程上使用了事件驱动的方式来解决高并发的问题。...后三种方法都是 spawn() 的延伸。 进程间的通信 在 NodeJS 中,子进程对象使用 send() 方法实现主进程向子进程发送数据,message 事件实现主进程收听由子进程发来的数据。...以下是支持发送的句柄类型: net.Socket net.Server net.Native dgram.Socket dgram.Native 句柄发送与还原 NodeJS 进程之间只有消息传递,不会真正的传递对象...IPC 通道传输的都是字符串,传输后通过 JSON.parse 还原成对象。...,它已经处于一个不确定状态,此时我们应该让这个进程优雅退出: 关闭异常 Worker 进程所有的 TCP Server(将已有的连接快速断开,且不再接收新的连接),断开和 Master 的 IPC 通道

    97720

    一文搞懂如何使用Node.js进行TCP网络通信

    可以发现当客户端连接数超过3的时候,新的客户端就无法连接这个服务器了,如图所示: 1.5、获取客户端发送的数据 createServer方法的回调函数参数是一个net.Socket对象(服务器所监听的端口对象...new net.Socket(); 创建一个socket对象的时候可以传入一个json对象。...2.2、连接TCP服务器 创建了一个socket对象后,调用socket对象的connect()方法就可以连接一个TCP服务器,代码如下: //引入net模块 const net = require('...net'); //创建TCP客户端 const client = new net.Socket(); //设置连接的服务器 client.connect(8001, '127.0.0.1', function...net.Socket(); //设置连接的服务器 client.connect(8001, '127.0.0.1', function () { console.log("连接服务器成功");

    2.3K30

    NodeJS错误处理最佳实践

    HTTP服务器访问了未定义的变量时奔溃了,这是程序员的失误。当前连接着的客户端会在程序崩溃的同时看到一个ECONNRESET错误,在NodeJS里通常会被报成“Socket Hang-up”。...连接断开是操作失败(因为这是任何一个正确的程序在系统的网络或者其它模块出问题时都会经历的),如果它不被正确处理,那它就是一个失误。...很多时候这种错误是暂时的,所以大部分情况下你得重新连接来解决问题。(这和接下来的重试不大一样,因为在你得到这个错误的时候不一定有操作正在进行) 把出错扩散到客户端。...请求可能成功完成,可能让服务器再次崩溃,可能以某种明显的方式不正确的完成,或者以一种很难调试的方式错误的结束了。 在一个完备的分布式系统里,客户端必须能够通过重连和重试来处理服务端的错误。...where `socket` is a Node net.Socket object.

    1.5K41
    领券