Как создать сообщения для отправки по TCP с помощью node.js? - PullRequest
5 голосов
/ 11 июля 2011

Мне нужно отправить строку JSON нескольким TCP-клиентам с TCP-сервера node.js.

Для того, чтобы читать сообщения из сокета / потока на стороне клиента, мне нужно сделать какое-то оформление сообщения. Один из способов сделать это состоит в том, чтобы префикс сообщения с длиной сообщения в виде массива, а затем преобразовать его в размер буфера для сообщения на стороне клиента.

Как мне сделать что-то подобное в файле node.js / javascript на сервере, а затем прочитать его на стороне клиента с помощью клиента .NET?

Учитывая этот код на стороне клиента, как бы я правильно разместил сообщение на стороне сервера, используя javascript / node?

        TcpClient client = new TcpClient(server, port);
        var netStream = client.GetStream();

        // read the length of the message from the first 4 bytes
        byte[] b = new byte[4];
        netStream.Read(b, 0, b.Length);
        int messageLength = BitConverter.ToInt32(b, 0);

        // knowing the length, read the rest of the message
        byte[] buffer = new byte[messageLength];
        netStream.Read(buffer, b.Length, buffer.Length);
        var message = System.Text.Encoding.UTF8.GetString(buffer);

1 Ответ

3 голосов
/ 11 июля 2011

для вывода входящих данных в nodejs вы можете попробовать использовать node-bufferlist или node-buffers или создайте свой собственный FSM вручную и загрузите его входящими порциями данных

на стороне сервера проще:

function sendPacket(stream, buffer)
{
    var prefix = new Buffer(4);
    var length = buffer.length;
    var offset = 0;
    // serialize 32bit little endian unsigned int
    prefix[offset++] = length & 0xff;
    prefix[offset++] = (length >> 8)  & 0xff );
    prefix[offset++] = (length >> 16)  & 0xff );
    prefix[offset++] = (length >> 24)  & 0xff );
    stream.write(prefix);
    stream.write(buffer);
}

или вы можете использовать узел v0.5 + buffer.writeUInt32

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...