52 lines
2.5 KiB
Plaintext
52 lines
2.5 KiB
Plaintext
Client Server
|
|
1. push,length ----------------->
|
|
2. <---------------- buffer size, DATA_ID
|
|
3. chunks ----------------->
|
|
|
|
------------------------------------------------
|
|
| MESSAGE_TYPE | SESSION_ID | CHUNK_ID | DATA |
|
|
------------------------------------------------
|
|
|
|
MESSAGE_TYPE (1 byte) = 0 (push)
|
|
1 (data)
|
|
2 (pop)
|
|
3 (print)
|
|
|
|
SESSION_ID = Große Daten kommen in mehrere Packeten an. Damit der Server weiß, zu
|
|
welchem "Datensatz" (Session) ein Packet, gehört, gibt er jeder "Session" eine
|
|
eindeutige ID (SESSION_ID).
|
|
|
|
CHUNK_ID = Die aufgeteilten Daten müssen nicht unbedingt in der richtigen
|
|
Reihenfolge beim Server ankommen, deshalb nummeriert der Client die "Chunks".
|
|
|
|
DATA = Die eigentlichen Daten.
|
|
|
|
Beispiel:
|
|
|
|
- Server hat eine Buffersize von 5 (heißt wir können 2 Zeichen in einen
|
|
Chunk packen, weil 3 Bytes für Metadaten (MESSAGE_TYPE, SESSION_ID,
|
|
CHUNK_ID draufgehen)
|
|
- Client will "hase" pushen
|
|
|
|
Client Server
|
|
1. --------------- Client meldet an, dass er etwas pushen möchte.
|
|
| 0 | 4 | - | - | -----------> Er teilt dem Server auch mit wie lang die
|
|
--------------- Nachricht ist, damit dieser schon Platz für die
|
|
Chunks reservieren kann.
|
|
|
|
2. ------------------ Server gibt Client seine buffersize (5) und einen
|
|
<----------- | 1 | 2, 0 | - | - | eindeutigen Identifier für die Daten (0)
|
|
------------------
|
|
|
|
3. ---------------- Client teilt seine Daten auf und schickt das erste
|
|
| 2 | 0 | 0 | ha | -----------> Datenpacket, SESSION_ID = 0 (vom Server vergeben),
|
|
---------------- CHUNK_ID = 0 (erster Teil der Daten)
|
|
|
|
4. ---------------- Client schickt das zweite Datenpacket
|
|
| 2 | 0 | 1 | se | -----------> SESSION_ID = 0, CHUNK_ID = 1
|
|
----------------
|
|
|
|
Der Server muss dann halt zusehen, dass er die Packet richtig zusammenbaut.
|
|
Dazu hält er alle (bisher) unvollständigen Packete zunächst in einer seperaten
|
|
List und packt diese erst auf den eigentlichen Stack, wenn alle Chunks da sind.
|