node.js的net模块的socket.setTimeout(time,[fun(){}])的使用方法及测试

2015-12-9 10:49:09

之前的socket服务器未对超时的socket做处理,客户端通信不通自动断开之后,服务器因不知情而一直维护着socket链接,而断开的客户端会重新申请一个新的连接占用新的端口,时间长了之后就会有大量的假连接占用了大量的端口。可以使用socket.setTimeout(time,[fun(){}])方法断开空闲的链接。

server.js

var net = require(‘net‘);

var server = net.createServer(function(socket) {
  socket.on(‘data‘, function (data) {
    console.log(data.toString());
    socket.write(data);
  });

  socket.on(‘end‘, function() {
    console.log(‘客户端已断开‘);
  });

  socket.on(‘error‘, function() {
    console.log(‘客户端错误‘);
  });

  var waitTime = 3;

  //设置超时时间
  socket.setTimeout(1000 * waitTime,function() {
    console.log(‘客户端在‘ + waitTime + ‘s内未通信,将断开连接...‘);
  });
  //监听到超时事件,断开连接
  socket.on(‘timeout‘, function() {
    socket.end();
  });
});

server.listen(8124, function() {
  console.log(‘服务器启动‘);
});

client.js

var net = require(‘net‘);

var client = net.connect({port: 8124},function() {
  console.log(‘client connected‘);
  client.write(‘hello world!\r\n‘);
});

client.on(‘data‘, function(data) {
  console.log(data.toString());
  // client.write(data);
});

client.on(‘end‘, function() {
  console.log(‘服务器断开连接‘);
});

也可以将socket.end()放到setTimeout(time,fun(){})的回调函数fun()中,这样就不用再设置对事件‘timeout‘的监听函数。

时间: 2024-12-21 16:03:32

node.js的net模块的socket.setTimeout(time,[fun(){}])的使用方法及测试的相关文章

Node.js的Formidable模块的使用

今天总结了下Node.js的Formidable模块的使用,下面做一些简要的说明. 1)     创建Formidable.IncomingForm对象 var form = new formidable.IncomingForm() 2)     form.encoding = 'utf-8' 设置表单域的编码 3)     form.uploadDir = "/my/dir"; 设置上传文件存放的文件夹,默认为系统的临时文件夹,可以使用fs.rename()来改变上传文件的存放位置

Node.js的net模块

net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法 创建TCP服务器 net.createServer方法 创建客户端去连接服务器 net.connect方法 简易聊天室服务端 chatServer.js var net = require('net'); // 创建TCP服务器 var server = net.createServer(); // 存储所有客户端socket var sockets = []; //接收客户端连接请求 server.on(

使用Node.js 和ws 模块构建WebSocket服务器

Node.js 中的ws 模块是最新的一个易用的.速度超快的web socket 实现,可以用来快速构建web socket 应用.其中还包含了wscat 命令行工具,可以用来模拟客户端或者服务器端. 在本实例中,我们将研究能够找到的最快的WebSocket 服务器.Node.js 中ws 模块不仅执行超快,而且使用也很简单.它实施方便,是本实例介绍Websocket 的理想选择. ws 模块很新,符合当前HyBi 协议草案,可以发送和接收数组类型数据(ArrayBuffer.Float32Ar

Node.js入门:模块机制

CommonJS规范  早在Netscape诞生不久后,JavaScript就一直在探索本地编程的路,Rhino是其代表产物.无奈那时服务端JavaScript走的路均是参考众多服务器端语言来实现的,在这样的背景之下,一没有特色,二没有实用价值.但是随着JavaScript在前端的应用越来越广泛,以及服务端JavaScript的推动,JavaScript现有的规范十分薄弱,不利于JavaScript大规模的应用.那些以JavaScript为宿主语言的环境中,只有本身的基础原生对象和类型,更多的对

Node.js 初识 fs 模块

fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 Unix 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了 同步 和 异步 两个版本,比如读取文件内容的函数有 异步的 fs.readFile() 和 同步的 fs.readFileSync(). Node.js 导入文件系统模块的语法如下: var fs = require('fs'); 1.异步和同步读取文件 fs.readFile(file[, options], callback(err,

node.js实用小模块

1.浮点数操作 npm install float 2.MD5加密类 npm install MD5 3.xml解析类 1 npm install elementtree 4.转换字符串大小写 1 npm install convert_str 5.SoapClient 1 npm install soap 6.字符串操作类 1 npm install string 7.缓存 1 npm install memory-cache 8.jsontoxml;  objecttoxml 1 npm i

Node.js 初识 Path 模块

Node.js 提供了一些处理 文件/文件夹 路径的公用方法,可以这样引入: var path = require('path'); path.basename(path[, ext])   ---> 返回值:String path.basename() 方法返回路径的最后一部分,与 Unix 的 basename 命令相似 参数: path:String ext:String,可选的文件拓展名,如果提供了ext 参数,则返回值中不包括拓展名 当 path 不是一个字符串或者提供了ext 但不是

Node.js中的模块机制

本文为读书笔记. 一.CommonJS的模块规范 Node与浏览器以及 W3C组织.CommonJS组织.ECMAScript之间的关系 Node借鉴CommonJS的Modules规范实现了一套模块系统,所以先来看看CommonJS的模块规范. CommonJS对模块的定义十分简单,主要分为模块引用.模块定义和模块标识3个部分. 1. 模块引用 模块引用的示例代码如下: var math = require('math'); 在CommonJS规范中,存在require()方法,这个方法接受模

Node.js中的模块接口module.exports浅析

在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.这里作者对此做了个简单的总结. 返回一个JSON Object 如下代码是一个简单的示例. 1 var exp = { 2 "version": "1.0.0", 3 "function1": null, 4 "module1": null, 5 };