Wie konvertiert ein Javascript-Objekt zu einem Knoten Puffer?

Ich bin mit Buffer auf meinem node-server und Buffer auf meine Javacript-client.

Für die Zwecke der Einsparung von bytes, ich bin auf der Suche zu senden meine Daten an den server über websockets als binary im Gegensatz zu JSON.

So, wenn ich das Javascript-Objekt von [ 5, false, 55, "asdf" ] ich umwandeln möchte, dass die Puffer auf der client direkt vor dem versenden. Vielleicht so etwas wie dieses:

object.toBuffer('int16', 'bool', 'int16', 'utf8');

und Lesen Sie es auf dem server so etwas wie dieses:

var obj = buffer.read('int16', 'bool', 'int16', 'utf8');

Ich bin auf der Suche zu aktuellen Lösungen und es sieht aus wie ich möglicherweise nur eine Menge von concating, die Angabe von byte-offsets/Längen, die Umwandlung von int zu Boolean, etc.

Gibt es eine bessere Möglichkeit?

Edit: Hier ist, wie ich denke, dass Sie derzeit haben, es zu tun. Ich denke, mein Problem ist nur, dass es allzu wortreich und Fehler-anfällig und ich bin auf der Suche nach einer prägnanten und eleganten Weg, es zu tun, weil diese operation in vielen verschiedenen Orten in meinem code.

//On client for [ 5, false, 55, "test" ]

const writeFirst = Buffer.allocUnsafe(2);
writeFirst.writeInt16LE(5, 0);
const writeSecond = Buffer.allocUnsafe(1);
writeSecond.writeUInt8(0);
const writeThird = Buffer.allocUnsafe(2);
writeThird.writeInt16LE(55, 0);
const writeFourth = Buffer.from('test');

const result = Buffer.concat([writeFirst, writeSecond, writeThird, writeFourth]);

//On server for reading buffer of [ 5, false, 55, "test" ]

const readFirst = result.readInt16LE(0);
const readSecond = Boolean(result.readUInt8(2));
const readThird = result.readInt16LE(3);
const readFourth = result.toString('utf8', 5);

Edit #2: War googeln um und ich denke, ich will vielleicht so etwas wie protocol buffers. Ich bin mir nicht ganz sicher, was Sie sind, oder wenn Sie anwenden, aber es sieht aus wie Sie, können Sie ein schema in eine Datei für alle Ihre Nachrichten und dann serialisieren Sie Ihre JSON-Objekte, um das schema und die haben es wieder einen Puffer, um Sie dann Deserialisieren mit dem gleichen schema auf den AUFTRAGGEBER/anderer server. Ich werde schauen in diese weitere.

  • Sie konvertieren müsste der Puffer, um einen Blob zu senden() auf a-Buchse sowieso, und gzip sollte sich darum kümmern, JSON Wiederholung, die arrays haben die kleinen sowieso.
  • Warum hätte es ein blob? Kannst du nicht tun connection.binaryType = "arraybuffer";?
  • hmm, vielleicht, ich wusste nicht, dass das eine Socket-option Letzte mal, dass ich schmutzig, nur Blobs wurden die Arbeit in meinem Projekt...
  • Haben Sie versucht Buffer.from([5, false, 55, 'asdf'], 'binary');?
  • Ich glaube nicht, dass das funktioniert mit den Streichern.
Schreibe einen Kommentar