Это схема моего приложения: Сервер: каждые 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/
Проблема заключается в том, когда сокет получает данные от серверав клиенте данные отправляются для вычислений, и пока данные не вычисляются, многие другие данные получают, и приложение вычисляет неправильноЕсли я проверяю только один раз для отправки данных с сервера на клиент, все в порядке, но когда данные отправляются постоянно, все не так.Как я могу это исправить?
Обновление 1: я обнаружил, что иногда сервер отправляет данные в 2 части!это причина ошибки.