Node JS套接字中的并发性

时间:2019-05-21 07:18:50

标签: node.js sockets asynchronous concurrency

这是我的应用程序的架构: 服务器:每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:​​我发现有时服务器会分两部分发送数据!这就是错误的原因。

0 个答案:

没有答案