精华内容
下载资源
问答
  • 解决方案有三个: 我用的第一个   1.screen 插件安装 screen -dmS win  screen -l 2.pm2守护进程 https://github.com/Unitech/PM2 3.nodup 命令,我用了感觉不好用 不用的时候记得要kill进程

    解决方案有三个:

    我用的第一个

     

    1.screen 插件安装   screen -dmS win 

    screen -l

    2.pm2守护进程   https://github.com/Unitech/PM2

    3.nodup  命令,我用了感觉不好用  不用的时候记得要kill进程

    eg:

    nohup /root/test.sh &


    展开全文
  • 建立连接非常重要,它是... 建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话: [Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”[Shake 2] 套接字B:“哦,是吗?请稍等,我准备...

    建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。
    建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:

    • [Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”
    • [Shake 2] 套接字B:“哦,是吗?请稍等,我准备一下。”
    • 等待片刻后……
    • [Shake 3] 套接字B:“我准备好了,可以断开连接了。”
    • [Shake 4] 套接字A:“好的,谢谢合作。”


    下图演示了客户端主动断开连接的场景:

    9067e4bba9575bea9434713c861f3bc2.png


    建立连接后,客户端和服务器都处于ESTABLISED状态。这时,客户端发起断开连接的请求:
    1) 客户端调用 close() 函数后,向服务器发送 FIN 数据包,进入FIN_WAIT_1状态。FIN 是 Finish 的缩写,表示完成任务需要断开连接。
    2) 服务器收到数据包后,检测到设置了 FIN 标志位,知道要断开连接,于是向客户端发送“确认包”,进入CLOSE_WAIT状态。
    注意:服务器收到请求后并不是立即断开连接,而是先向客户端发送“确认包”,告诉它我知道了,我需要准备一下才能断开连接。
    3) 客户端收到“确认包”后进入FIN_WAIT_2状态,等待服务器准备完毕后再次发送数据包。
    4) 等待片刻后,服务器准备完毕,可以断开连接,于是再主动向客户端发送 FIN 包,告诉它我准备好了,断开连接吧。然后进入LAST_ACK状态。
    5) 客户端收到服务器的 FIN 包后,再向服务器发送 ACK 包,告诉它你断开连接吧。然后进入TIME_WAIT状态。
    6) 服务器收到客户端的 ACK 包后,就断开连接,关闭套接字,进入CLOSED状态。

    关于 TIME_WAIT 状态的说明


    客户端最后一次发送 ACK包后进入 TIME_WAIT 状态,而不是直接进入 CLOSED 状态关闭连接,这是为什么呢?
    TCP 是面向连接的传输方式,必须保证数据能够正确到达目标机器,不能丢失或出错,而网络是不稳定的,随时可能会毁坏数据,所以机器A每次向机器B发送数据包后,都要求机器B”确认“,回传ACK包,告诉机器A我收到了,这样机器A才能知道数据传送成功了。如果机器B没有回传ACK包,机器A会重新发送,直到机器B回传ACK包。
    客户端最后一次向服务器回传ACK包时,有可能会因为网络问题导致服务器收不到,服务器会再次发送 FIN 包,如果这时客户端完全关闭了连接,那么服务器无论如何也收不到ACK包了,所以客户端需要等待片刻、确认对方收到ACK包后才能进入CLOSED状态。那么,要等待多久呢?
    数据包在网络中是有生存时间的,超过这个时间还未到达目标主机就会被丢弃,并通知源主机。这称为报文最大生存时间(MSL,Maximum Segment Lifetime)。TIME_WAIT 要等待 2MSL 才会进入 CLOSED 状态。ACK 包到达服务器需要 MSL 时间,服务器重传 FIN 包也需要 MSL 时间,2MSL 是数据包往返的最大时间,如果 2MSL 后还未收到服务器重传的 FIN 包,就说明服务器已经收到了 ACK 包。

    展开全文
  • 主要给大家介绍了关于nodejs如何检测因特网是否断开的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用nodejs具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • nodejs 关于mysql模块 连接超时自动断开解决方法,在这块遇到的坑,而且坑了很久才找到的,分享只为求分
  • 最近在用Electron开发一款应用,其中有涉及到检测因特网是否断开的需求。Electron基于Chromium和Node.js,让你可以使用HTML、CSS和JavaScript构建应用。所以Electron提供nodejs、浏览器两套运行环境。 笔者最先考虑...
    • 苏格团队
    • 作者:Tomey

    背景

    最近在用Electron开发一款应用,其中有涉及到检测因特网是否断开的需求。Electron基于Chromium和Node.js,让你可以使用HTML、CSS和JavaScript构建应用。所以Electron提供nodejs、浏览器两套运行环境。

    笔者最先考虑到的方案HTML5提供的online/offline网络连接事件。

    window.addEventListener('online', ...)
    window.addEventListener('offline', ...)
    复制代码

    结论很失望,这两个网络连接事件,只是检测本地网络连接状态。

    既然浏览器没有提供检测因特网是否断开的接口,笔者只能在nodejs寻求答案。

    调研

    说到nodejs,笔者最先想到是去npm仓库搜索现有的库。找到了两款检测因特网状态的库internet-availableis-online

    internet-available

    这个库检测因特网连接状态原理,是检测dns连接状态。

    这里大家肯定有个疑问,使用nodejs原生模块dns不是更简洁吗?

    你说的没错,nodejs确实提供这样的方法,但是dns原生模块并没有提供超时检测。internet-available可以设置超时参数,默认是5000ms(依赖dns-socket库实现dns超时,有兴趣可以研究其源码,这里不做展开)。

    internet-available使用举例:

    var internetAvailable = require("internet-available");
    
    internetAvailable().then(function(){
        console.log("Internet available");
    }).catch(function(){
        console.log("No internet");
    });
    复制代码

    如果想加入检测次数和每次检测超时时间,代码如下:

    var internetAvailable = require("internet-available");
    
    internetAvailable({
        timeout: 4000,
        retries: 10,
    }).then(function(){
        console.log("Internet available");
    }).catch(function(){
        console.log("No internet");
    });
    复制代码

    internet-available默认检测的DNS域名是google.com,如果想自定义域名,代码如下:

    var internetAvailable = require("internet-available");
    
    internetAvailable({
        domainName: "xxxxx.com",
        port: 53,
        host: '8.8.8.8' // 默认,国内请改成114.114.114.114
    }).then(() => {
        console.log("Internet available");
    }).catch(() => {
        console.log("No internet");
    });
    复制代码

    备注:8.8.8.8是谷歌公司提供的免费DNS服务器,该地址是全球通用,相对来说,更适合国外以及访问国外网站的用户使用,国内更适合用114.114.114.114。

    is-online

    is-online与internet-available检测方式相同,唯一区别是is-online可以在nodejs和浏览器环境同时运行。在浏览器环境下,通过navigator.onLine返回网络连接状态,但与HTML5 online、offline事件一样,只能检测本地连接。

    is-online使用举例

    const isOnline = require('is-online');
     
    isOnline().then(online => {
        if(online){
            console.log("We have internet");
        }else{
            console.log("Houston we have a problem");
        }
    });
    复制代码

    此库也提供超时设置,且可以设置Internet协议版本,这是一个通常不需要设置的高级选项,但它对于专门断言IPv6连接非常有用,代码如下:

    var isOnline = require('is-online');
     
    isOnline({
        timeout: 5000,
        version: "v4" // v4 or v6
    }).then(online => {
        if(online){
            console.log("Internet available");
        }else{
            console.log("No internet");
        }
    });
    复制代码

    总结

    除了以上两个库,还有其他方式可以检测因特网断开吗?笔者目前想到的还可以通过发起http head请求是否成功响应判断;通过ping 目标host或者domain是否连通检测判断。如果有更好的方式,欢迎讨论~

    转载于:https://juejin.im/post/5cb5d6d6518825324f68cb20

    展开全文
  • I have a nodejs websocket server and I have the following problem.When my clients connect to the server and terminate gracefully the onclose method is called on those sockets and I perform clean up op...

    I have a nodejs websocket server and I have the following problem.

    When my clients connect to the server and terminate gracefully the onclose method is called on those sockets and I perform clean up operations on the closed socket.

    When the client disconnects due to network, the onclose method is not called. Is there any timeout to be set so onclose is called automatically after a timeout?

    I am using ws package for the websocket server in nodejs

    解决方案

    default ws implementation doesn't have a callback for network disconnects from client side

    You can find a keepAlive implementation here

    展开全文
  • } }) google/baidu后发现了一个使用pool的实例 发现他的代码每一次请求都用pool创建一个connection,改进我的代码终于解决了一段时间后connection自动断开的问题。 正确代码为 pool =mysql.createPool(env); ...
  • var connection;... console.info('如果是连接断开,自动重新连接') if (err.code === 'PROTOCOL_CONNECTION_LOST') { handleError(); } else { throw err; } }); } handleError();  
  • 参照网上这段代码还是不能解决问题,本地连接不会出现断开,求大神们讲解var connection;function handleDisconnect() {connection = mysql.createConnection(db_config); // Recreate the connection, since// the ...
  • db/index.js数据库配置文件一、在数据库连接失败的情况下,回调函数,再次发起连接,直到连接成功为止。handleDisconnect(){this.connection.connect(function(err) {if(err) {// console.log('error when ...
  • Nodejs 断开重连redis

    千次阅读 2018-01-22 10:43:46
    原文地址:... 目前Nodejs端使用redis模块对redis服务进行连接,代码如下: var redisClient = redis.createClient(config.redisAuth); redisClient.on("error", function (err)
  • var net = require('net'); var port = 8080; var host = '127.0.0.1'; var client= new net.Socket(); //创建socket客户端 client.setEncoding('binary'); //连接到服务端 client.connect(port,host,...
  • realguess提出了一个问题:When to close MongoDB database connection in Nodejs,或许与您遇到的问题类似。回答者mpobrien给出了该问题的处理方式:Here's a potential solution based on the counting approach ...
  • nodejs+mysql 断线重连

    2021-01-19 07:26:09
    function handleError () {conn = mysql.createConnection({host: ‘localhost‘,user: ‘nodejs‘,password: ‘nodejs‘,database: ‘nodejs‘,port: 3306});//连接错误,2秒重试conn.connec...
  • MyAnimeList API的NodeJS包装器 图片由 是MAL API的有前途的包装器。 警告 。 在解决内部问题之前,Popura不会工作。 目录 漫画模型 动漫列表项目模型 漫画清单项目模型 Myinfo模型 发展 执照 安装 $ npm ...
  • 我最近正在做一个个人项目.... 上线后,几次请求两个数据接口后node自动断开,总是报告503. 我不清楚,但经过今天的调查,终于解决了.1.mysql链接正常模式mysql的一般用法如下:var mysql = require('my...
  • 由于mysql默认8小时连接无访问,就会断开.为此查了一下资料,有同种比较简单的解决方案: 1. 增加 MySQL 的 wait_timeout 属性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置:# Set a connection to wait...
  • // 如果是连接断开,自动重新连接 if (err.code === 'PROTOCOL_CONNECTION_LOST') { connect(); } else { console.error(err.stack || err); } } } // 连接数据库 function connect () { db = mysql.create...
  • nodejs连接postgres

    2021-01-17 10:27:45
    安装驱动建议使用pg-pool,但要同时安装pg与pg-poolcnpm install pg pg-pool --save编写模块/**postgres.js*/const Pool = require(‘pg-pool‘);const config = {user: ‘postgres_user‘,password: ‘postgres_...
  • 问题描述:nodejs服务需要在后台持续运行。可借助forever 或者 pm2 forever相关命令 //在服务器上全局安装(先安装nodejs) npm install -g forever 注意:如果安装失败,可尝试使用cnpm进行安装(需要安装...
  • 或者在WorkBench等GUI管理软件中找到并修改为普通加密就好了 NodeJS在对SQL进行查询操作后返回结果 NodeJS的相比与其他服务器端语言的优势与难点是它的异步功能。几乎所有NodeJS的I/O操作都是异步的,这也就导致在...
  • 默认一个请求,超过2分钟就会自动断掉! var server=http.createServer(app); server.setTimeout(0); 【nodejs官方地址:】 https://nodejs.org/api/http.html#http_response_settimeout_msecs_callback
  • nodejs中使用worker_threads来创建新的线程

    万次阅读 热门讨论 2021-01-21 20:27:05
    之前的文章中提到了,nodejs中有两种线程,一种是event loop用来相应用户的请求和处理各种callback。另一种就是worker pool用来处理各种耗时操作。 nodejs的官网提到了一个能够使用nodejs本地woker pool的lib叫做...
  • 正常写的nodejs代码,user和password都是对的,但是就是连接不上。const mysql = require('mysql')// 创建链接对象const connection = mysql.createConnection({host: '127.0.0.1',user: 'root',password: '123456',...
  • gRPC nodejs踩坑

    千次阅读 2020-02-21 00:23:53
    nodejs写的gRPC流式服务端,在循环体外部创建了proto消息体,在循环内部set值,并write回客户端,结果客户端收到的每个包内容都相同。 看到这结果,也能猜到个大概了,必定和node的异步机制有关,循环结束后才...
  • 了不起的nodejs 配套书本源代码 书籍目录: Node 的安装 windows Node REPL 执行文件 NPM 安装模块 自定义模块 安装二进制工具包 浏览NPM仓库 介绍 js基础 类型 类型的困惑 函数 THIS ,FUNCTION #CALL ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,616
精华内容 1,846
关键字:

断开nodejs