2016-07-22 37 views
1

Nach der Verwendung von verschiedenen Messaging-und RPC-Systemen bin ich zu dem Schluss gekommen, dass Sie schließlich immer traditionelle RPC, und Push-Ereignisse irgendeiner Art benötigen. Sonst landen Sie unweigerlich mit einem Polling-Hack.Gibt es Thrift-ähnliche RPC-Systeme, die Rückrufe zulassen?

Zum Beispiel unterstützte HTTP ursprünglich nur RPC-ähnliche Methoden (GET und POST geben sofort eine Antwort zurück). Die Leute erkannten, dass Push-Ereignisse nötig waren, und hackten sie mit langen Pollings. Schließlich wurde dies mit Server-Sent Events behoben.

CoAP (eine leichte UDP-basierte Version von HTTP) unterstützt auch Push-Ereignisse durch Hinzufügen einer "Monitor" -Option zu GET-Anfragen. Es ist eine ziemlich elegante Lösung.

Aber keiner von denen sind Thrift-Stil RPC, mit denen ich meine, Sie schreiben eine Schnittstelle Definitionsdatei, und es gibt ein Tool, das diese Schnittstelle in nativen Code für Ihre Sprache der Wahl kompiliert. Danach können Sie entfernte Prozeduren fast wie lokale aufrufen.

Also meine Frage ist, gibt es irgendwelche Thrift-style RPC-Systeme, mit denen Sie Push-Ereignisse abonnieren und einen Rückruf (oder ähnliches) anrufen können, wenn ein Ereignis eintrifft?

+0

Hast Du bei GRPC geschaut? Es basiert auf Callbacks (obwohl nicht unbedingt ein Subscribe-Modell, da ich denke, dass Sie nur einen Handler haben können), unterstützt Protobuf und hat gerade begonnen, auch FlatBuffers zu unterstützen. – Aardappel

Antwort

1

Ja:

  • gRPC unterstützt "Streaming", die eine einzelne logische RPC-Aufruf bedeutet, kann tatsächlich mehrere Nachrichten in jede Richtung umfassen.
  • Cap'n Proto unterstützt Objektfunktionen, die es beiden Seiten der Verbindung ermöglichen, einen Objektverweis an die andere Seite zu senden, an die Anrufe getätigt werden können. Beispielsweise könnte der Client eine Methode auf dem Server aufrufen und als einen der Methodenparameter ein Callback-Objekt bereitstellen. Das Callback-Objekt implementiert eine vordefinierte RPC-Schnittstelle. Wenn der Server das Rückrufobjekt aufruft, führt er einen Rückruf zum Client durch. Tatsächlich sind Cap'n Proto-Verbindungen vollständig symmetrisch: Es gibt keine Unterscheidung auf der Protokollebene zwischen Client und Server.

(Disclosure: Ich bin der Autor des Käpt'n Proto und war auch der Autor des Buffers v2-Protokoll, obwohl ich nicht mit dem Unternehmen assoziiert gRPC bin.)

+0

Perfekt, danke! – Timmmm