Socket.io mit dem Versprechen oder asynchrone Rückrufe
Könnte dies eine Art von anti-pattern, aber was wäre der beste Weg, um zu simulieren eine promise callback
wenn emitting Daten vom client zum server mit socket.io
?
Für einen event würde ich sehr viel wie es sich zu Verhalten wie ein normaler get-request, damit der client Daten an den server senden und der server antwortet mit einer Antwort und dann beheben oder die Ablehnung Versprechen.
InformationsquelleAutor Johan Nordberg | 2014-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie haben zur Nachverfolgung von Anfragen. Also ich würde anfangen mit einem "globalen" counter (es muss nicht global sein, es ist genug, dass es sichtbar ist für zwei Funktionen definiert Balg) wird inkrementiert bei jeder Anfrage (und emittiert gemeinsam mit ihm) und einer "globalen" namespace-handler. Der code kann wie folgt Aussehen:
Nun müssen Sie nur noch sicherstellen, dass der server antwortet mit dem gleichen format, also JSON
sind, und verwenden die gleiche ID für die gleiche Anfrage. Sie können diesen code verwenden, wie diese:
Können Sie spielen auch mit diesem code hinzufügen für die Beispiel-timeouts.
Endlich haben Sie einen Blick auf JSON-RPC. Es ist ein richtiges Protokoll ist einfach, und Sie können leicht implementieren, über WebSocket.
Nur damit Sie wissen: es ist eine andere Herangehensweise. Wann immer Sie senden Anfragen an den server diese Anfragen gesendet werden in einer bestimmten Reihenfolge. Sie haben, um sicherzustellen, dass der server antwortet in umgekehrter Reihenfolge. Dies ist, wie Sie können-match-Anfrage mit Antwort. Art FIFO. Dies ist tatsächlich, wie HTTP mit
keep-alive
funktioniert. Aber es wird kompliziert, auf der Seite des Servers, um sicherzustellen, dass die Antworten sind in der richtigen Reihenfolge (+ möglicherweise gibt es einen Leistungseinbruch, wenn einige Antworten warten in der Warteschlange). Ich würde keine Ratschläge in diese Richtung. Die Art, wie ich Ihnen gezeigt habe, die oben ist viel einfacher zu implementieren und zu pflegen.Vielen Dank für das follow-up! Ich fange an zu denken, dass ich sollte nicht verwenden, Buchse.io für diese Art der Reaktion abhängige Anfrage, sondern einen Weg finden, um Zugriff auf den socket manager/speichern auf dem server von einem normalen get-Anfrage. Wie in einem chat vielleicht möchten Sie auch bitten, den server für eine Liste der Mitglieder in den Raum.
InformationsquelleAutor freakish
Hier ist was ich getan habe. Ich erstellte eine Funktion, die strahlt eine socket-Befehl und gibt ein Versprechen. Meine einzige Einschränkung ist ich habe nicht viel getan, mit diesem code noch nicht, so müssen Sie möglicherweise einige Optimierungen. Es erfordert auch Q für seine Versprechungen/deferreds.
- Client-Funktion definition:
Client-side code, um den Anruf zu tätigen:
Server-Seite handler
Den wichtigsten Teil dieser Prozedur ist, dass der zweite parameter, hier genannt setValueResult muss aufgerufen werden, mit der ein Objekt mit einer "Erfolg" - Taste, hält den Wert true oder false. Dies war eine Entscheidung von mir, einen Weg, um ablehnen, die Versprechen, im Fall irgendeine Art von Fehler auf der server-Seite.
InformationsquelleAutor Greg Tatum
Den aktuellen sockel.io version 2.1.0 erlaubt das senden von callback-Funktionen auf dem server:
Client
Server
Können Sie auch ein Versprechen vor dem emittieren und lösen es in der client-callback-Funktion.
InformationsquelleAutor Tsunamis