2017-04-02 1 views
0

Ich versuche, ein Websocket-Echtzeit-Chat-System in nodejs zu implementieren. Ich habe bereits ein Login-System und das Websocket-Chat-System. Das Einzige, woran ich festhalte, ist das Speichern der Nachrichten in MySQL, damit der Benutzer auf seinen Chat-Verlauf zugreifen kann. Das Problem ist, dass ich keine Web-Socket-Nachricht an den Empfänger senden möchte, dann muss die MySQL-Einfügung aus irgendeinem Grund fehlschlagen.Wie kann ich Datenverlust beim Speichern von Web-Socket-Nachrichten in mysql verhindern?

Eine mögliche Lösung: Die offensichtliche Lösung ist die Nachrichtendaten in MySQL speichern dann die Web-Socket-Nachricht an den Empfänger senden. Wenn ein Fehler auftritt, senden Sie das zurück an den Absender, anstatt die Nachricht zu senden. Würde dies jedoch nicht den Zweck von Web-Sockets zunichtemachen, wenn der Server auf eine MySQL-Einfügung der Erfolgsbestätigung warten muss?

+0

Websockets oder Socket.io? –

+0

Besiege den Zweck in welcher Weise? – EJP

+0

Wir sprechen über einige Millisekunden. Der Benutzer wird nicht einmal die durch das Speichern in mysql eingeführte Latenz wahrnehmen. Wenn dies der Fall ist, liegt wahrscheinlich ein Problem mit Ihrer Abfrage oder dem Server vor. –

Antwort

3

Angenommen, dies ist eine große Sache, weil Sie eine kleine Menge an Wartezeit vermeiden wollen, die auf eine Datenbanksicherung wartet (was ich denke, ist eigentlich kein Problem, das zu tun). Senden Sie die Nachricht. Zeigen Sie auf dem Bildschirm "Nachricht wird gesendet ..." an. Initiieren Sie auf dem Server das Speichern der asynchronen Datenbank. Wenn der Client des anderen Benutzers die Nachricht empfängt, senden Sie eine Bestätigung auf dem Bildschirm des Absenders Wenn die Datenbank auf dem Server speichern abgeschlossen ist, müssen Sie nichts tun, es sei denn, es gibt einen Fehler in diesem Fall können Sie den Benutzer dort informieren war ein Fehler beim Speichern der Nachricht und wiederholen Sie den Speichervorgang.

Einige Systeme wie Google Hangouts während der Sprach-/Videoübertragung versuchen nicht einmal, den Chatverlauf zu speichern.

Sie sind nur dann wirklich ein Problem haben gehen, wenn Ihre Datenbank-Server aus dem Raum läuft oder untergeht, in welchem ​​Fall Sie haben größere Probleme und Ihre Fehlermeldungen clue die Benutzer in.

Oder Sie können warten Um in der Datenbank zu speichern, ist es nicht viel Zeit zu warten. Websockets und socket.io gehen sowieso immer auf den Server. Wenn Sie WebRTC-Datenkanäle verwenden, ist das Peer-2-Peer-Protokoll, das den Server nicht einbeziehen würde.

Verwandte Themen