2011-07-11 3 views
5

Je dois envoyer une chaîne JSON à un certain nombre de clients TCP à partir d'un serveur TCP node.js.Comment tracer des messages pour l'envoi de TCP avec node.js?

Afin de lire les messages de la socket/flux sur le côté client, j'ai besoin de faire une sorte de trame de message. Une façon de procéder consiste à préfixer le message avec la longueur du message sous la forme d'un tableau, puis à le convertir en taille de tampon pour le message côté client.

Comment est-ce que je ferais quelque chose comme ceci dans node.js/javascript sur le serveur et le lirais du côté client en utilisant un client de .NET?

Étant donné ce code côté client, comment encadrerais-je correctement le message côté serveur en utilisant 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); 

Répondre

3

à unframe données entrantes nodejs vous pouvez essayer d'utiliser node-bufferlist ou node-buffers ou créer votre propre FSM manuellement et le nourrir avec des morceaux de données entrants

côté serveur

est plus simple:

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

ou vous pouvez utiliser le noeud v0.5 + buffer.writeUInt32

+0

La classe Buffer est ce dont j'avais besoin. Je devrais d'abord avoir RTFM je suppose. Merci @Andrey. –

+0

notez que 0,5 est considéré comme instable et qu'il n'y a pas de sérialiseurs int/float dans le tampon 0.4.9 –