Websocket-frame-Größe Begrenzung
Schicke ich riesige Brocken von JSON-Daten mittels websockets. Die JSON über 1000 Einträge. Aufgrund der frame-Größe Beschränkung, die Websocket-protocol-teilt automatisch die JSON-in-frames, die nicht geholfen werden kann. Wie können wir nicht ändern Sie die frame-Größe von websockets.
Das problem:
Wenn ich versuche zu bewerten, meine JSON mit JSON.parse
es gibt mir einen parsing-Fehler ist offensichtlich, weil die Rahmen nicht vollständige JSON-Objekte. All dies geschieht in der Websocket - onmessage
Ereignis-Rückruf. Wie kann ich erhalten, die riesige JSON in unterschiedlichen frames und noch in der Lage sein zu analysieren?
Ich habe versucht, concat die Bilder in onmessage
immer noch der Fehler besteht weiterhin.
Zwischenfrage:
Wie concatinate einem gebrochenen JSON richtig?
- Seite Antwort: in Ordnung, ohne irgendwelche Brocken...
- Jede Auflösung, die auf dieser? Ich bin vor dem gleichen Problem.
- Fügen Sie die Größe des Puffers Parameter aus dieser Liste in Ihrem web.xml github.com/Atmosphere/atmosphere/blob/master/modules/cpr/src/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem einzigen WebSocket-frame, pro RFC-6455 Basis der framing, hat eine maximale Größe von 2^63 bytes (9,223,372,036,854,775,807 Byte ~= 9.22 Exabyte) (Korrektur durch @Sebastian)
Jedoch eine WebSocket-Nachricht, die aus 1 oder mehr frames, hat keine Auflagen von der Protokoll-Ebene.
Jede WebSocket-Implementierung verarbeitet die Nachricht und frame-Grenzen anders. Wie die Einstellung maximale Nachrichten-Größen für die gesamte Nachricht (in der Regel für den Speicherverbrauch Gründen), oder mit streaming-Optionen für große Nachrichten, um besser zu nutzen den Speicher.
Aber in deinem Fall ist es wahrscheinlich, dass Ihre gewählte WebSocket-Implementierung hat einen bug und ist nicht richtig in der Teilung der JSON-Nachricht in mehrere Nachrichten anstelle von mehreren frames. Sie können die Netzwerk-Inspektions-Werkzeuge in Chrom-oder einem externen tool wie Wireshark, um dieses Verhalten zu bestätigen.
Da Sie es mit WS, die ist low-level, die Sie benötigen, um eine Anwendung zu erstellen-Protokoll, das sich mit der gesendeten Daten über mehrere WS-frames. Es ist bis zu Ihnen, zum verketten der Daten, die in den einzelnen WS-Rahmen (btw, nicht concat die frames... concat die Daten in jedem frame).
Grundsätzlich sind Sie neu erfinden, ein file-transfer-Protokoll.
Ändern Sie die Standard-maxFrameSize & MessageSize