Node.js的长连接
之前写的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的长连接的更多相关文章
- paip.最好的脚本语言node js 环境搭建连接mysql
paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world .js 2 #---------模 ...
- node.js利用express连接mysql数据库
我们创建一个mysql.js (好像大神们,称呼这叫一个模块,然后暴露一个接口)用来连接数据库 var connction ={}; connction.mysql = { host:"lo ...
- Node.js使用ftp连接远程ftp服务器枚举和下载文件示例
示例代码: var Ftp = require('ftp'); var fs = require('fs'); var path = require('path'); // 首先判断参数中是否包含{d ...
- Node.js使用MySQL连接池示例
下面是一个封装好的工具类: var fs = require('fs'); var mysql = require('mysql'); var pool = mysql.createPool({ ho ...
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...
- 使用Node.js实现数据推送
业务场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器). 后端推送数据的解决方案有很多,比如轮询.Comet.WebSocket. 1. 轮询对于后端来说开发成本最低,就是按照传统的 ...
- 一、认识Node.js
1.什么是Note.js? 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个 Javascript 运行环境(runtime).它让 JavaScript 可 ...
- 如何更好的利用Node.js的性能极限
通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...
- 《唐三学node.js系列》—魂士篇&&三哥初始node.js
前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...
随机推荐
- [CA]一个证书两个域名
一般一个证书是绑定一个Common name,出于某种测试的需要,我们可能要求一个Site的证书可以是针对2个域名的. 操作如下: 1.CA上CMD输入下面命令,回车: Certutil –setre ...
- Python copy对象(copy与deepcopy)
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- codeforce 230D Dijsktra
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- 使用ViewPager实现三个fragment切换
新建一个android项目 先展示效果吧 首先看myfragmentPagerAdater这个类的代码 package com.example.viewpager; import java.util. ...
- Hibernate配置文件详解
Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...
- Scrapy运行报错解决方案
最近在学习Scrapy框架,用博客记录一下遇到的错误的解决方案 时间: 2016-9-20 错误:ImportError: No module named items 原因:spiders下的.py文 ...
- Video标签播放视频?谷歌浏览器?safari?? 谷歌浏览器播放不了mp4格式的视频的原因
webm格式和mp4格式,判断了浏览器能否支持的视频类型后,给了一个if判断,如果是支持mp4格式,就返回视频后缀mp4,如果是webm,就返回后缀webm.结果,在谷歌浏览器中播放不了,为什么我指定 ...
- Jenkins的plugin开发
Jenkins强大的功能主要靠其丰富的plugin体现,之前的一篇博客<Jenkins安装plugin>中介绍了如何找到并安装需要的plugin.虽然目前已经有大量非常优秀的plugin可 ...
- 关于PHP定时执行任务的实现(转)
PHP在这方面应该说是比较弱,如果只用php去实现可以如下: <?php ignore_user_abort();//关闭浏览器后,继续执行php代码 set_time_limit(0);//程 ...