Używam usługi autobahn do uruchamiania serwera sieci Web w celu uzupełnienia mojej aplikacji Django. Czasami muszę wysyłać wiadomości z Django na serwer websocket, który działa poprawnie przy użyciu modułu websocket-client. Chciałbym użyć protokołu WAMP, ponieważ interfejs RPC/PubSub wygląda świetnie, ale kod klienta Pythona jest zaimplementowany jako skręcony protokół i nie mogę wymyślić, jak go użyć, tj. Jak wywołanie funkcji, a nie z jakiejś zagranicznej pętli zdarzeń. Czy jest coś, czego nie widzę w dokumentach, czy też moja architektura powinna być inna?Klient imperatywny do automatycznego serwera WAMP?
Odpowiedz
https://github.com/itamarst/crochet może ci w tym pomóc.
To wygląda bardzo obiecująco, dziękuję :-) – Simon
Interesujące. I tak, używając tej biblioteki, możesz zrobić to, co chcesz: uruchom Autobahn (klient) w swojej aplikacji, ale blokuj (z POV aplikacji). – oberstet
Czy nie jest możliwe utworzenie instancji i użycie klienta WAMP bez uruchamiania pętli zdarzeń? A może wymagałoby to stworzenia pełnowymiarowej implementacji "bez eventów" w dodatku do implementacji Twisted & asyncio? – Petri
Wszystko w Pythonie jest konieczne. Myślę, że masz na myśli "blokowanie" lub "synchronicznie". –
Jeśli chodzi o architekturę, istnieją (przynajmniej) 2 opcje: a) uruchomienie Autobahn jako oddzielnego serwera i uzyskanie dostępu jako klient z Django. b) uruchomić Django i Autobahn (serwer) w ramach jednego procesu. Jest przykład do robienia b) z Flask i Autobahn tutaj https://github.com/tavendo/AutobahnPython/blob/master/examples/websocket/echo_wsgi/server.py – oberstet
@ Jean-PaulCalderone: Masz rację, ja chcę synchronicznego, blokującego połączenia. – Simon