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 concat
ing, 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Puffer ist erste argument muss ein String, Puffer, ArrayBuffer, Array oder array-artiges Objekt.
Nehmen, dass die Informationen berücksichtigt, die wir umsetzen können, was Sie suchen, durch die Schaffung eines Puffers aus einem String. Es würde wie folgt Aussehen:
Dann können Sie bringen Sie Ihre JSON-zurück-etwa so:
new Buffer()
ist gegenwärtig veraltet (auch wenn es noch arbeiten im Knoten 8.2). Die unterstützte Methode istBuffer.from(<string>)