客户端写入服务器

时间:2017-12-20 20:23:19

标签: node.js sockets

所以我采用了以下代码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');

1 个答案:

答案 0 :(得分:0)

当客户端完成在for事件处理程序内的connect循环中发送数据时,没有更多内容可以让它退出。这将终止连接,服务器将获得ECONNRESET通知它连接已断开。

如果您希望客户端在完成发送后闲逛,请给它一些保持活力的理由。在客户端套接字上注册data事件处理程序是一种可能性。