标签:
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‘的监听函数。
node.js的net模块的socket.setTimeout(time,[fun(){}])的使用方法及测试
标签:
原文地址:http://www.cnblogs.com/lswit/p/5032157.html