所以我采用了以下代码https://gist.github.com/tedmiston/5935757示例并稍作修改,以便客户端将数据写入服务器。这应该是可行的,因为客户端套接字确实支持写入。在我的一个用例中,客户端将相当数量的数据从客户端发送到服务器,在这种情况下,我收到ECONNRESET错误。附件是客户端和服务器片段。我想知道是否有人看过这个以及他们是否知道封面下出了什么问题。
以下是我的客户的副本:
var net = require('net');
var client = new net.Socket({writeable: true}); //writeable true does not appear to help
client.on('close', function() {
console.log('Connection closed');
});
client.on('error', function(err) {
console.error('Connection error: ' + err);
console.error(new Error().stack);
});
client.connect(5900, '127.0.0.1', function() {
var count = 0;
console.log('Connected');
for(var i = 0; i < 100000; i++) {
client.write('' + i + '');
//bufferSize does not seem to be an issue
//console.info(client.bufferSize);
}
});
和我的服务器:
var net = require('net');
var count = 0;
var server = net.createServer(function(socket) {
socket.pipe(socket); //With this uncommented I get an ECONNRESET exception after 14299 writes with it commented it hangs after 41020 writes
socket.on('data', function(data) {
console.info(count++); //This makes it occur sooner
//count++;
//maxConnections is not the issue
//server.getConnections(function(err, count) {
//console.info('count = ' + count);
//});
});
socket.on('close', function() {
console.info('Socket close');
});
socket.on('error', function(err) {
console.error('Socket error: ' + err + ', count = ' + count);
console.error(new Error().stack);
});
});
server.listen(5900, '127.0.0.1');
答案 0 :(得分:0)
当客户端完成在for
事件处理程序内的connect
循环中发送数据时,没有更多内容可以让它退出。这将终止连接,服务器将获得ECONNRESET
通知它连接已断开。
如果您希望客户端在完成发送后闲逛,请给它一些保持活力的理由。在客户端套接字上注册data
事件处理程序是一种可能性。