So senden Sie alte Nachrichten mit Websockets

8

Ich habe ein funktionierendes WebSocket-Beispiel, in dem Clients Nachrichten vom Server empfangen.

Ich bin nicht sicher, wie ich alte Nachrichten an Clients senden soll, wenn sie sich verbinden.

Beispiel:

  • Jeder Client gibt bei der Verbindung
  • seinen Namen an
  • Der Server antwortet mit "[Name] nur verbunden" (an alle Clients)
  • Alle neuen Clients erhalten diese Nachrichten NICHT

Ich frage mich, ob es irgendwelche Möglichkeiten gibt, wie Clients alte Nachrichten empfangen können (entweder alle oder Nachrichten in den letzten 5 Minuten wären akzeptabel).

Ich vermute, dass ich diese Informationen möglicherweise selbst erfassen muss, sie irgendwo speichern muss (wie eine Datenbank) und die Nachrichten selbst an neue Kunden senden muss. Ist das richtig, oder fehle ich etwas?

Wenn jemand einen Pseudocode oder einen Link zu einem Beispiel dafür hat, wie andere das implementiert haben, wäre das praktisch.

    
Drew Khoury 28.06.2013, 07:53
quelle

2 Antworten

4

Sie müssen es selbst erfassen und auf dem Server speichern ... Sobald der Benutzer eine Verbindung herstellt, müssen Sie diese Daten allen verbundenen Clients und den Nachrichten, die Sie gespeichert haben, an den Benutzer, der die Verbindung hergestellt hat, mitteilen. Also müssen Sie programmieren, um die Daten an Benutzer zu senden

Übrigens, was verwenden Sie Server-Seite? (Knoten, Erlang, etc)

Sie können den folgenden Link überprüfen, wenn Sie node.js verwenden

Ссылка

    
Jack Daniel's 28.06.2013, 07:58
quelle
2

Sie könnten so etwas tun:

  1. Jede Nachricht sollte eine ID haben - & gt; muid ( Eindeutige Nachrichten-ID )
  2. Jedes Mal, wenn ein Client eine Nachricht sendet, erhält er eine ACK vom Server zusammen mit der muid für die gesendete Nachricht.
  3. Jedes Mal, wenn eine neue Nachricht auf der Serverseite empfangen wird, wird eine muid zugewiesen, mit dem ACK gesendet und mit der Nachricht an jeden verbundenen Benutzer gesendet. Auf diese Weise kann die Ansicht für jeden Benutzer die gleiche Sequenz zu einem bestimmten Zeitpunkt in der Zeit darstellen.
  4. Jedes Mal, wenn ein neuer Benutzer eine Verbindung herstellt, sendet er die letzte muid , die er empfangen hat, damit der Server weiß, wo dieser Benutzer aufgehört hat, Nachrichten zu empfangen. Der Server könnte dann so viele alte Nachrichten senden, wie Sie möchten, abhängig von der Art des Speichers, den Sie implementieren:
    1. Vollständiger Verlauf: Ich würde einen Datenbankspeicher mit entsprechender Indizierung empfehlen
    2. Letzte N Nachrichten: Abhängig von der Größe von N können Sie einfach die letzten N Nachrichten in einem Array fester Größe speichern und sie, alle oder den benötigten Chunk, bei jeder Wiederverbindung senden. Denken Sie daran, dass dies Speicher verbrauchen wird. Das Speichern der letzten 1024 Nachrichten für 1024 verschiedene Chats würde ziemlich viel Speicher verbrauchen, besonders wenn die Nachrichten unbegrenzt groß sind.

Hoffe es hilft

    
Leo Nomdedeu 03.10.2014 10:08
quelle

Tags und Links