2016-07-27 5 views
0

Ich möchte Bilder und Texte von Android-Client zu Node.js TCP-Server senden. Sie wissen, die Größe von data in 'data' Rückruf in Node.js ist unvorhersehbar.Wie senden Sie unterschiedlich codierte Daten über denselben Stream?

Meine Frage ist, wie kann der Server Bilder und Texte trennen? Ich denke, es ist unmöglich, so werde ich den Stream (machen Sie einen anderen Server) oder Bild mit Base64 kodieren ... aber,

Wenn Sie eine Meinung haben, herzlich willkommen!

Antwort

1

Egal was, Sie müssen eine Art Protokoll einbeziehen. Wenn Sie die Binärdatei unverändert verwenden möchten, ohne sie zu codieren, müssen Sie ein Protokoll auswählen (oder erstellen), das dies unterstützt.

Sie könnten etwas wie WebSockets verwenden, aber das löst nur das Rahmenproblem. Sie müssen weiterhin Ihr eigenes Nachrichtenformat definieren (da IIRC WebSockets keine Felder in seinem Protokoll für die Verwendung durch Endbenutzer bereitstellt). In diesem Sinne können Sie auch nur DIY.

Eine einfache Lösung könnte die Erstellung eines TLV-Protokolls (Type-Length-Value) sein. Bei dieser Art von Protokoll haben Sie ein Typfeld, gefolgt von einem Längenfeld und dann ein Datenfeld, das [Länge Feldwert] Byte lang ist. Machen Sie die festen Größen der Felder für Typ und Länge groß genug, um Ihren Anwendungsfall zu unterstützen. Beispielsweise könnte das Typfeld ein einzelnes Byte sein (256 Nachrichtentypen zulassen) und das Längenfeld 4 Byte haben (eine einzelne Nachricht kann bis zu 4 GB Daten enthalten). Das Analysieren dieser Nachrichten ist einfach: Lesen Sie 5 Bytes, die Ihnen den Typ und die Länge liefern, dann analysieren Sie die letzten 4 der 5 Bytes als vorzeichenlose 32-Bit-Ganzzahl und lesen Sie dann diese vielen Bytes. Sie können die Daten zwischenspeichern oder streamen, was auch immer Sie benötigen.

+0

TLV .. es ist sehr hilfreich Hinweis! Danke :) –

+0

Aber ich wollte Serververarbeitung minimieren, weil der Server so viele wie möglich wie ein Proxy arbeiten muss. Ich habe mich nur gefragt ... jedenfalls, danke! –

+0

Ich denke, TLV-Protokolle sind so minimal wie möglich. Es liest nur 5 Bytes, dann n Bytes, dann wiederhole es. – mscdex

Verwandte Themen