2012-10-30 7 views
15

Pracuję nad eksperymentem naukowym, w którym około dwóch tuzinów osób testowych gra turową grę ze sobą/przeciwko sobie. W tej chwili jest to aplikacja internetowa Python z interfejsem WSGI. Chciałbym zwiększyć użyteczność w witrynach internetowych: Kiedy wszyscy gracze zakończyli swoje turnieje, chciałbym powiadomić wszystkich klientów, aby zaktualizowali swój status. W tej chwili każdy musi albo poczekać na przekroczenie limitu czasu, albo ciągle przeładowywać i czekać na komunikat o błędzie "Zakręt w toku", aby się nie pojawić (skuteczne czekanie, skutecznie).Łączenie gniazd internetowych i WSGI w aplikacji pythonowej

Przeczytałem dokumentację wielu bibliotek stron internetowych i rozumiem, jak działają websockets, ale nie jestem pewien co do architektury do mieszania WSGI i websockets: Czy mogę mieć websockets i serwer WSGI w tym samym procesie (i jeśli więc, jak, używając naprawdę każdej biblioteki websockets) i po prostu zadzwonić pod numer my_websocket.send_message() z programu obsługi WSGI, czy powinienem mieć oddzielny serwer websockets i zrobić jakiś IPC? A może nie powinienem ich w ogóle mieszać?

edycja, 6 miesięcy później: skończyło się rozpoczynając proces serwera oddzielne WebSockets (używając Autobahn), zamiast integrowanie go z serwerem WSGI. Powodem było to, że rozdzielenie dwóch z nich jest znacznie łatwiejsze i czystsze, a rozmowa z serwerem Websockets z procesu WSGI (komunikacja z serwerem do serwera) przebiegła bezproblemowo i pierwsza próba została wykonana przy użyciu websocket-client.

+0

Którą architekturę sieci Pythona używasz, jeśli jej używasz? – John

+0

Brak w tej chwili, ale jestem otwarty na wszelkie sugestie. – Simon

+0

również w tym przypadku proponuję drugą oberstet, aby użyć kolby. – John

Odpowiedz

14

Oto przykład, że robi to, co chcesz:

To uruchamia aplikację WSGI internetowej (Kolby oparte w tym przypadku, ale może być cokolwiek WSGI zgodny) plus Serwer WebSocket pod 1 serwerem i 1 portem.

Możesz wysyłać wiadomości WS z poziomu funkcji obsługi stron internetowych. Autobahn zapewnia również PubSub na górze WebSocket, co znacznie upraszcza wysyłanie powiadomień (poprzez WampServerProtocol.dispatch), tak jak w twoim przypadku.

Ujawnienie: Jestem autorem Autobahn i praca dla Tavendo.

+0

Awesome, dokładnie tego szukałem! Poza tym nie wiedziałem jeszcze o protokołach na Websockets. – Simon

+0

Aby uzyskać szybkie wprowadzenie do WAMP (= RPC + PubSub przez WebSocket), sprawdź http://wamp.ws/ – oberstet

+0

Rozwalony link gitub, a nowa wersja nie wydaje się być aplikacją WSGI ... – pjz

Powiązane problemy