2016-04-04 15 views
0

Ich muss einen Server erstellen, der als ein Zwischenpunkt zwischen den Peers dienen würde. Es muss so funktionieren, dass jeder andere Entwickler seine eigene Client-App erstellen, sich mit diesem Server verbinden (wie mit dem Kommunikationskanal) und an einer Konversation teilnehmen kann. Die gesamte Kommunikation sollte in Echtzeit erfolgen und die Nachrichten sollten in der Server-Datenbank persistent sein.Wie wird ein Echtzeit-Chat-Server entworfen, so dass jeder eine Client-App für die Kommunikation über diesen Server erstellen kann?

Der Aufbau einer Chat-App ist ziemlich trivial, aber wenn es darum ging, eine Art "Kommunikationskanal" zu bauen, verwirrte mich das aus irgendeinem Grund.

Könnten Sie mir bitte helfen zu verstehen, wie Sie die Lösung entwerfen und entwerfen und wie Sie richtig darüber denken?

Ich dachte an die Verwendung des folgenden Stapels: Node.js, WebSockets/WebRTC, RethinkDB/MongoDB.

Sollte ich eine spezielle API erstellen, die die Nachrichten empfangen und übertragen würde? Ich kann mir keine andere Lösung als die API vorstellen (oder auch, wie die Apps von Drittanbietern an Gesprächen teilnehmen könnten), aber ich bin mir nicht sicher, wie genau diese API funktionieren sollte (unter Berücksichtigung der Echtzeit-Funktion). Soweit ich weiß, sollte das Datenbankschema dasselbe wie für jede andere Chat-App sein.

Aber was mich am meisten verwirrt, ist dieser Prozess des Empfangens, Emittierens und Persistierens der Daten gleichzeitig.

Ich suche Ratschläge, um zu verstehen, wie die Lösung funktionieren und wie sie zu gestalten ist.

Antwort

1

Wenn Sie sofort viele bestehende Clients unterstützen möchten, können Sie die XMPP-Route verwenden. Ich habe das gemacht, zusammen mit Node.js, eJabberd und Strophe. Irgendwann hatte eine Webseite, die mit einer Android App und einer Iphone App kommunizieren konnte. Zu der Zeit, als die WebSockets nicht unterstützt wurden, verwendete ich BOSH.

Architektonisch hatte ich eine definierte Kanäle. Ähnlich wie ein IRC-Kanal, bei dem 2 oder mehr Personen angemeldet sind. Wenn Sie also eine Nachricht senden, wird dieser Kanal in der Datenbank mit allen Eigenschaften (Zeitstempel, Absender, Nachricht usw.) gespeichert und an alle Teilnehmer gesendet.

Die zugrunde liegende Technologie mit WebSocket ist definitiv der Weg zu gehen, da es Echtzeit-Messaging unterstützt.