这是我的应用程序的架构: 服务器:每20毫秒将新数据发送到客户端。 客户端:从服务器获取数据并在其上进行一些计算。数据通常很大,并且计算很耗时(约6秒)。 这是我在客户端中的代码:
clientSocket.on('data', chunk => {
try {
console.log(`=> Message size: ${clientSocket.bytesRead}`);
formatMessages(chunk);
} catch (error) {
console.log(`=> Error: ${error}`);
}
});
async function formatMessages(chunk) {
var dataString = chunk;
console.log(`=> data: ${dataString}`);
if (dataString.length == 4 /** || dataString.length == 8 || dataString.length == 12 */) {
lastMessageLength = dataString;
console.log(`=> Data is HEADER => ${dataString}`);
} else {
if (lastMessageLength != 0) {
// Only message
if (chunk.length == lastMessageLength) {
console.log(`=> Chunk length is correct`);
console.log(`=> \t Message is ${chunk}`);
listReceivedMessages.push(lastMessageLength + dataString);
} else {
console.log(`=> Chunk length is wrong`);
}
lastMessageLength = 0;
} else {
// Message with message length
console.log(`=> Message with message length`);
var messageSliced = chunk;
do {
let messageLength = parseInt(messageSliced.slice(0, 4));
let messageData = messageSliced.slice(4, messageLength + 4);
messageSliced = messageSliced.slice(4 + messageLength);
console.log(`=> Message length: ${messageLength}`);
console.log(`=> Message data: ${messageData}`);
listReceivedMessages.push(messageLength + messageData);
} while (messageSliced != '');
}
}
}
服务器示例代码在这里:
https://jsfiddle.net/imohammadi/w46jx0v2/2/
问题是当套接字从客户端中的服务器接收数据,发送数据进行计算并且直到数据正在计算时,许多其他数据正在接收并且应用程序计算错误。如果仅测试一次将数据从服务器发送到客户端,则一切正常,但是当数据连续发送时,则一切都是错误的。 我怎样才能解决这个问题?
Update1:我发现有时服务器会分两部分发送数据!这就是错误的原因。