之前写的js服务器脚本,在服务器上运行的挺好的。也经过了压力测试,单次接受4000次的连接不成问题。在5s里,可以应答1W多次的连接。对于这个连接次数,我们还是挺满意的,但是Boss说:客户端每2分钟会断开一次连接。这是不可接受的,需要对连接设置。

要保持长连接,好吧。开始,我的想法是取消2分钟的限制,通过查阅资料  http://blog.win-ing.cn/archives/89和www.nodejs.org/api/http.html(在这里可以看到Server有2分钟超时的说明)  在Server监听的'request'的时候,response.setTimeout(0, function(){'写入日志'});。
这样取消了Node.js 2分钟的限制。

但是长连接,领导还是不满意。而且也说明了,使用打开服务器的keepalive。好吧,继续查看nodejs的http文档。开起来只有对request的连接的socket设置keepalive,才能满足我们的条件。好吧尝试一下,并不对。在日志里边,可以看到捕捉的process的异常。request本身是IncomingMessage,也有socket,对他keepalive也可以尝试一下。这次是对的。这样开启了服务器的Keepalive。可以看firefox里打开的网页,5个小时以后也可以收到服务器的信息。

对于系统的keepalive机制,觉得需要在理解一下。就像是心跳包,通过检测,回应的空数据包,检测客户端是否还在。tcpdump看了一下,的确有来回length为 0 的数据包在传输。

另外 Node.js服务器我放在了后台执行,但是经常莫名其妙的down掉了。

我今天也找到了原因。

问题还是出在我身上啊。因为js脚本有console输出。这样的话,运行js脚本的进程必须有一个stdout,我通过session启动了js脚本,session就是js脚本的stdout,我关闭了session,这个js脚本进程运行到输出的时候,就挂掉了。可以用一个linux命令nohup解决这个问题。

Node.js的长连接的更多相关文章

  1. paip.最好的脚本语言node js 环境搭建连接mysql

    paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world   .js 2 #---------模 ...

  2. node.js利用express连接mysql数据库

    我们创建一个mysql.js (好像大神们,称呼这叫一个模块,然后暴露一个接口)用来连接数据库 var connction ={}; connction.mysql = { host:"lo ...

  3. Node.js使用ftp连接远程ftp服务器枚举和下载文件示例

    示例代码: var Ftp = require('ftp'); var fs = require('fs'); var path = require('path'); // 首先判断参数中是否包含{d ...

  4. Node.js使用MySQL连接池示例

    下面是一个封装好的工具类: var fs = require('fs'); var mysql = require('mysql'); var pool = mysql.createPool({ ho ...

  5. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  6. 使用Node.js实现数据推送

    业务场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器). 后端推送数据的解决方案有很多,比如轮询.Comet.WebSocket. 1. 轮询对于后端来说开发成本最低,就是按照传统的 ...

  7. 一、认识Node.js

    1.什么是Note.js? 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个 Javascript 运行环境(runtime).它让 JavaScript 可 ...

  8. 如何更好的利用Node.js的性能极限

    通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...

  9. 《唐三学node.js系列》—魂士篇&&三哥初始node.js

    前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...

随机推荐

  1. 【转】如图,win7登陆界面,键盘失灵,没办法登陆。求解!如何在这个界面打开个鼠标可以点的软键盘

    原文网址:http://zhidao.baidu.com/link?url=URPzHJXt9_yhtE-2A89apKsn5Y1B9O2NR_mktkaHSOPbUWb7TKSIYJKj_-lYPn ...

  2. net user命令

    net user net user 用户名 net user 用户名 密码 /add net user 用户名 /del net localgroup administrators net local ...

  3. octopress 如何添加youku视频和本地视频(octopress how to add a youku video or a local video)

    用octopress 官方的video tag 可以添加视频,但是由于国内经常使用的是youku,所以下面是如何添加youku视频到octopress的教程. 首先添加youku.rb文件到路径:oc ...

  4. poj 2479 Maximum sum (最大字段和的变形)

    题目链接:http://poj.org/problem?id=2479 #include<cstdio> #include<cstring> #include<iostr ...

  5. spring 学习的开源项目

    http://jinnianshilongnian.iteye.com/blog/1508016 http://jinnianshilongnian.iteye.com/blog/2049092 sp ...

  6. windows系统下搭建linux

    1.先装虚拟机VMware Workstation(步骤参照度娘) 2.在虚拟机上装CentOS6.5Linux系统(步骤参照度娘)   3.安装SecureCRT终端仿真程序,用来登录Linux服务 ...

  7. Maven 打胖jar

    自己去看原版:http://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ 一个Eclipse的工程,在pom中配置 ...

  8. android生成二维码

    新建项目 布局截图如下(一个输入框,一个按钮,一个imageview),输入想要的东西(文字,数字,网站链接等)然后点击按钮生成二维码,然后可以扫描识别. 首先需要一个谷歌的一个jar包 activi ...

  9. myeclipse svn

    打开myeclipse的help---install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10. ...

  10. poj 2462 Period of an Infinite Binary Expansion

    欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Eule ...