A Client在不断开连接的时候, B Client 监听的 data 事件被触发后, 怎么确保数据是完整的?
嗨! 大家好! 先秀一段代码:
'use strict'
var net = require('net');
var client = new net.Socket();
// 连接到 B Client
client.connect(port, ip, function() {
});
client.on('data', function(data) {
// 怎么确保已经获取了所有数据?
});
假设上述代码是 A Client 端连接到 B Client. 连接成功后, 接着 B Client 给 A Client 发了很长很长的数据, 于是就会触发 B Client 所监听的data
事件. 这个时候, A Client 没有断开连接. 那么怎么确保 B Client 已经获取到所有的数据? 这里没有确定的数据格式.
监听 end
事件很明显是行不通的, 因为这个事件只有在对方断开连接后才会触发. 所以就没有如下这样的解决方式了:
'use strict'
var net = require('net');
var client = new net.Socket();
client.connect(port, ip, function() {
});
var buffers = [];
client.on('data', function(data) {
buffers.push(data);
});
client.on('end', function() {
console.log(Buffer.concat(buffers));
});
也许是我不太懂网络, 所以我这个问题可能让你们感到很好笑. 任务紧急的原因, 让我目前没得时间去啃 TCP/IP 协议的书. 望大家指点下. 多谢了!