bytesWritten : 发送的字节的数量
destroyed : 标识链接是否已经被破坏,一旦被破环,就不用使用该链接来传输数据。
localAddress : 远程客户端链接本地地址的host。如果我们监听服务的host是0.0.0.0,而客户端链接的是’192.168.1.1’,最后的值是后者。
localPort : 本地的端口。
remoteAddress : 客户端IP,如果socket已经是destryed的话,该值为
undefined。remoteFamily : 客户端是IPvX
回包异常处理
服务器从客户端接受到需要处理的数据后进入处理环节,再业务逻辑处理完成之前如果socket以外断开的话,待服务器再给客户端回报的时候会直接响应
error事件并报错Error :
This socket has benn ended by the other part,所以在回报之前服务端需要先判断该socket是否被销毁,如果没有被销毁则回包,如果已经断开则销毁:
var net = require('net');
var biz = require('./biz');
var server = net.createServer(function(socket){ socket
.on('data',function(data){
biz.do(data)
.then(function(){
if( !socket.destroyed ) {
socket.write( data.toString() );
} else {
// do some report
socket.destry();
}
})
.catch(function(){
!socket.destroyed && socket.end('server handler error');
});
})
.on('end',function(){
console.log('socket end')
})
.on('error',function(error){
console.log('socket error',error);
});
});
server.listen(56200,function(){
console.log('server run at ',server.address());
});
server.on('error',function(err){
throw err;
});
限制客户端数据大小
对请求大小限制是服务安全里面比不可少的一个环节,服务端不能无限大小的去接受客户端发送过来的所有数据,而限制大小就是第一道门槛。
var net = require('net');
var MAX_REQUEST_BYTES = 2 * 1024 * 1024; // 2M
var server = net.createServer(function(socket){ socket
.on('data',function(data){
if(data.bytesRead > MAX_REQUEST_BYTES) {
socket.pause();
socket.end('data is too big, forbidden');
// do some report
}
})
.on('end',function(){
console.log('socket end')
})
.on('error',function(error){
console.log('socket error',error);
});
});
server.listen(56200,function(){
console.log('server run at ',server.address());
});









