@fgalan,
genau zu sein NGSI PUB/SUB über HTTP-Protokoll spezifiziert, was ungewöhnlich und wahrscheinlich nicht effizient ist.
Um der Lage sein, die Nachricht zurück zu HTTP-Teilnehmer von der Server-Seite zu schieben, müssen Sie einige Tricks verwenden:
- Lange Polling
- Interval-Polling
- Eventsource
- HTTP multipart/mixed
- HTTP segmentierte Übertragungs
Diese verhindern das Schließen der HTTP-Verbindung, so dass der Server die Daten an den Abonnenten senden kann, sobald sie angekommen sind (beachten Sie, dass dies nicht das erneute Öffnen der HTTP-Verbindung für jeden PUB/SUB verhindert, den Sie von der Clientseite durchführen möchten auch resorce-konsumierend). Sie können mehr darüber hier lesen: http://mrjoes.github.io/2013/06/21/python-realtime.html
Das ist genau das, was ich Frage - welche dieser Methoden verwenden Sie in Orion, und können Sie mich bitte auf den Code verweisen.
Wegen dieser Probleme mit HTTP ist es wirklich ungewöhnlich, HTTP für PUB/SUB zu verwenden. Es gibt keine erfolgreiche Lösung, die es tut (nach meinem Wissen), und alle anderen verwenden ein anderes spezifisches Protokoll für RT Messaging - RabbitMQ (AQMP), Redis, NATS, Kafka, MQTT - Sie benötigen ein Protokoll, das für PUB/SUB geeignet ist wenn Sie wollen, dass es effizient ist.
Apropos - haben Sie jemals Ihre PUB/SUB-Warteschlange mit anderen Lösungen verglichen? Ich würde Orion sehr gerne in einer dieser Analysen sehen: http://bravenewgeek.com/dissecting-message-queues/, Seite an Seite mit der Schlachtfeld-erprobten SW für diesen Zweck. Ich würde gerne die Latenzen und den Durchsatz sehen ...
Ich kann sehen, warum WS benötigt werden, aber ich sehe nicht, wie Sie sie mit NGSI-Spezifikation ausrichten werden - Ihre Spezifikation erfordert heute PUB/SUB über HTTP (über REST-Aufruf). Werden Sie die Spezifikation ändern?
Mit freundlichen Grüßen,
Drasko
Ich verstehe sehr gut, dass HTTP REST NGSI verwendet wird. Allerdings - Problem mit HTTP-Verbindungen ist, dass sie unidirektional sind und Daten können nicht vom Server auf die Clients geschoben werden. Dies ist ein bekanntes Problem, das Leute gestört hat, die seit Jahren Browser-Apps entwickeln. Wie lösen wir dieses Problem? –
Websocket (im letzten Absatz erwähnt) wäre eine Lösung für dieses Problem. Sie können dieses Problem bei Githbu über den Fortschritt dieser (noch) experimentellen Funktion überwachen: https://github.com/telefonicaid/fiware-orion/issues/1181 – fgalan
Ja, für den Browser. Aber nicht für Inter-System PUB/SUB. Und außerdem - NGSI ** explizit ** gibt nur HTTP REST-Endpunkt für PUB/SUB an - willst du die Spezifikation ändern, um WS zu verwenden? Ich habe oben ausführlichere Fragen gestellt, bitte erläutern Sie die Fragen, die ich dort gestellt habe. –