为什么我的nodejs代码中的第一个和第二个套接字请求有区别?

这是我的回声服务器代码

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'); 

这是testing代码

 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'); }); 

当我第一次运行客户端服务器启动后,terminal显示:

 ➜ test node client.js Connected Received: Echo server Connection closed 

我可以看到服务器已经通过wireshark将数据发送到客户端,但是客户端在这个数据包之后立即发送一个RST数据包到服务器。

第二是正常的

 ➜ test node client.js Connected Received: Echo server Hello, server! Love, Client. random data Connection closed 

输出的差异只是由于竞赛条件。 有时服务器能够在套接字实际上完全closures之前(接收和)发送更多的数据,而其他时间则不行。