为什么我的nodejs代码中的第一个和第二个套接字请求之间存在差异?

时间:2016-12-02 02:46:20

标签: javascript node.js sockets

这是我的echo服务器代码

Pattern regex = Pattern.compile("^.*?\/\/([^:\/\s]+)(.*(?=\?|\#))", Pattern.DOTALL);

这是测试代码

var net = require('net')                                                           

var server = net.createServer(function(socket) {
    socket.write('Echo server\r\n');
    socket.on('data', function(data) {
        console.log('recv data: ' + data);
        socket.write(data + ' random data');
    }); 
    socket.on('end', socket.end);
});

server.listen(1337, '127.0.0.1');

当我在服务器启动后首次运行客户端时,终端显示:

var net = require('net');                                                          

var client = new net.Socket();

client.connect(1337, '127.0.0.1', function() {
    console.log('Connected');
    client.write('Hello, server! Love, Client.');
});

client.on('data', function(data) {
    console.log('Received: ' + data);
    client.destroy();
});

client.on('close', function() {
    console.log('Connection closed');    
});

我可以看到服务器已经将数据发送到wireshark中的客户端,但客户端在此数据包之后立即向服务器发送RST数据包。

第二个是正常的

➜  test node client.js 
Connected
Received: Echo server

Connection closed

1 个答案:

答案 0 :(得分:1)

输出的差异仅仅是因为竞争条件。有时服务器能够(实际上完全关闭套接字之前接收和发送更多数据,有时则不然。)。