2016-04-03 15 views
0

Verwenden von Event-Maschine und Ruby. Momentan mache ich ein Spiel, bei dem am Ende des Zuges überprüft wird, ob dort andere Benutzer sind. Wie kann ich beim Senden von Daten an den Benutzer mit ws.send() überprüfen, ob der Benutzer tatsächlich die Daten erhalten hat oder eine alternative Lösung ist?Ruby websocket überprüfen, ob Benutzer existiert

+0

In der Regel müssen Sie über den Socket zurückpingen, um zu überprüfen, ob die Fernbedienung aktiv ist und nicht blockiert ist. – tadman

+0

Hat Ping einen Rückruf, um zu überprüfen, ob eine Antwort erfolgt. Wie wahr oder falsch? – ninetailschris

Antwort

2

Da die Bibliothek Ihnen keinen Zugriff auf die zugrunde liegenden Protokollelemente bietet, müssen Sie Ihrem Anwendungsprotokoll Elemente hinzufügen, um dies zu tun. Ein typischer Ansatz besteht darin, jeder Nachricht und jeder Antwort auf Nachrichten mit Bestätigungsnachrichten, die diese Identifikatoren enthalten, eine Kennung hinzuzufügen.

Beachten Sie, dass ein solcher Ansatz Ihnen nur hilft, eine bessere Vorstellung davon zu haben, was ein Kunde erhalten hat. Es gibt keine Garantie für einen bestimmten Zustand im Falle von Fehlern. Ein Beispiel wäre der Verlust einer Verbindung, nachdem der Client eine ACK gesendet hat, der Dienst diese jedoch nicht erhalten hat.

Aufgrund der eben erwähnten Komplexität ist es oft einfacher zu versuchen, die meisten Operationen idempotent zu machen - das kann ohne Schaden für das System wiedergegeben und während/nach Fehlerbedingungen wieder abgespielt werden. Sie können außerdem eine Möglichkeit finden, den relevanten Zustand regelmäßig vollständig zu synchronisieren, um die langfristige Fortsetzung von geringfügigen Fehlern zu vermeiden, die durch den Verlust von Daten/einer Verbindung verursacht werden.

+0

Gaben Daumen hoch. Ich habe die Antwort auf mein Problem gefunden. Ich habe socket.state verwendet, um festzustellen, ob der Socket geschlossen oder offen ist, und auf diese Antwort reagieren. – ninetailschris

Verwandte Themen