2011-07-11 7 views
5

Potrzebuję wysłać ciąg JSON do wielu klientów TCP z serwera TCP node.js.Jak utworzyć ramkę wiadomości do wysyłania przez TCP za pomocą pliku node.js?

Aby odczytywać wiadomości z gniazda/strumienia po stronie klienta, potrzebuję utworzyć ramkę wiadomości. Jednym ze sposobów, aby to zrobić, jest przedrostek wiadomości o długości wiadomości jako tablicy - następnie przekonwertuj ją na rozmiar bufora dla wiadomości po stronie klienta.

Jak zrobić coś takiego w pliku node.js/javascript na serwerze, a następnie odczytać go po stronie klienta za pomocą klienta .NET?

Biorąc pod uwagę ten kod po stronie klienta, w jaki sposób ustawić ramkę wiadomości poprawnie po stronie serwera przy użyciu javascript/węzeł?

 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); 

Odpowiedz

3

do unframe przychodzących danych w nodejs można spróbować użyć node-bufferlist lub node-buffers lub stworzyć swój własny FSM ręcznie i karmić go z przychodzących kawałkami danych

stronie serwera jest prostsza:

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); 
} 

lub możesz użyć węzła v0.5 + buffer.writeUInt32

+0

Klasa bufora jest tym, czego potrzebowałem. Najpierw powinienem mieć RTFM. Dzięki @Andrey. –

+0

Zauważ, że 0.5 jest uważane za niestabilne i nie ma serializatorów int/float w buforze 0.4.9 –