2013-08-17 13 views

Antwort

8

Websocket ist eine ziemlich dünne Abstraktionsschicht über einem herkömmlichen TCP-Socket. Nach dem ersten Handshake ist der Unterschied minimal. Die Frage ist also: Woher weiß ich, ob ein Datenblock von der Gegenstelle empfangen wurde? Die kurze Antwort: nur wenn der Peer sie explizit mit dem Protokoll auf Anwendungsebene bestätigt. Der Remote-Client sendet TCP-ACK-Pakete für jedes Datenpaket, das Sie ihm senden, aber diese Tatsache ist aus guten Gründen gut vor der Anwendung verborgen. Empfang eines ACK-Pakets bedeutet nur, dass der entfernte TCP-Stack damit umgegangen ist, sagt aber nichts darüber aus, wie (und ob) die Client-Anwendung es verarbeitet hat.

Fügen Sie Ihrem Chatprotokoll einen speziellen Nachrichtentyp "Bestätigung" hinzu. Fügen Sie in allen ausgehenden Nachrichten eine monoton ansteigende Sequenznummer ein und fügen Sie die SN der empfangenen Nachricht in die ACK-Nachricht ein, um genau zu erfahren, wie viele Daten der Client bereits verarbeitet hat.

Verwandte Themen