2015-05-04 18 views
5

Buduję aplikację internetową, która składa się z dwóch części. W jednej części wykorzystuje połączenie w czasie rzeczywistym między serwerem a klientem, a w drugiej wykonuje intensywne zadanie cpu w celu dostarczenia odpowiednich danych.Jaki jest najlepszy sposób komunikacji między dwoma serwerami?

Implementacja komunikacji w czasie rzeczywistym w nodejs i części intensywnej procesora w python/java. Jaki jest najlepszy sposób, w jaki serwer nodejs może uczestniczyć w komunikacji dwustronnej z innym serwerem?

+1

Czy komunikacja między węzłem i partycją Pythona ma być również w czasie rzeczywistym, czy może to być realizowane za pomocą luźniej powiązanego podejścia? – Exinferis

Odpowiedz

2

Dla podstawowego rozwiązania możesz użyć Socket.IO, jeśli już go używasz i wiesz jak to działa, wykona zadanie, ponieważ pozwala na komunikację między klientem a serwerem, gdzie klient może być innym serwerem w inny język.

Jeśli potrzebujesz bardziej niezawodnego rozwiązania z dodatkowymi opcjami i kontrolkami lub które może obsłużyć większą przepustowość ruchu (chociaż nie powinno to stanowić problemu, jeśli ostatecznie przesyłasz go przez relatywnie wolny internet) możesz spojrzeć na coś jak ØMQ (ZeroMQ). Jest to kolejka komunikatów, która zapewnia większą kontrolę i wiele różnych metod komunikacji wykraczających poza samą reakcję na żądanie.

Po ustawieniu zalecam używanie serwera intensywnie obciążającego procesor jako stabilnego serwera (serwera) i serwera (ów) jako klienta. Zakładając, że używasz jednego serwera do zadań intensywnie obciążających procesor i uruchamiasz kilka instancji serwera NodeJS, aby skorzystać z wielu rdzeni dla twojego serwera WWW.Upraszcza to twoją komunikację, ponieważ chcesz mieć jeden punkt, z którym chcesz się połączyć.

Jeśli przewidujesz, że potrzebujesz wielu serwerów CPU, będziesz chciał skonfigurować serwer routingu, który może prowadzić routing między wieloma serwerami WWW i wieloma serwerami CPU, aw tym przypadku poleciłbym dodatkową pracę związaną z uczeniem ØMQ.

+0

Czy masz jakieś dobre tutoriale lub implementacje open source, na które mogę popatrzeć, aby lepiej się tego nauczyć? Lub po prostu rtfm? – nnrales

0

Musisz być patrząc na socketio

umożliwia dwukierunkową komunikację Socket.IO opartego na zdarzeniu w czasie rzeczywistym. Działa na każdej platformie, przeglądarce lub urządzeniu, skupiając się jednocześnie na niezawodności i szybkości.

Gniazda tradycyjnie stanowiły rozwiązanie, wokół którego zaprojektowano większość systemów czasu rzeczywistego w wersji , zapewniając dwukierunkowy kanał komunikacyjny między klientem a serwerem.

1

Można użyć podanej metody http.request, aby utworzyć żądanie curl w kodzie węzła. Metoda http.request służy również do implementacji interfejsu API uwierzytelniania. Możesz umieścić swój oddzwonienie w wyniku żądania, a gdy otrzymasz dane odpowiedzi w węźle, możesz odesłać je do użytkownika. Podczas gdy w backgrount serwer java/python może wykorzystywać żądanie węzła dla zadania intensywnego CPU.

1

Utrzymuję aplikację node.js, która łączy 34 zadania rozłożone na 2 serwerach.

W twoim przypadku, do komunikacji między serwerem WWW i serwerem aplikacji możesz rozważyć mqtt.

Używam mqtt do tego rodzaju komunikacji. Istnieją klienty mqtt dla większości języków, w tym węzła/javascript, python i java. W moim przypadku publikuję wiadomości json za pomocą mqtt 'topics', a każde zadanie, które zarejestrowało się, aby zasubskrybować "temat", odbiera dane po ich opublikowaniu. Jeśli masz google "pub sub", "mqtt" i "mosquitto" znajdziesz wiele referencji i przykładów. Mosquitto (obecnie projekt Eclipse) jest tylko jednym z wielu brokerów mqtt, które są dostępne. Kolejny bardzo dobry broker napisany w Javie nazywa się hivemq.

Jest to bardzo proste, niezawodne rozwiązanie, które dobrze się skaluje. W moim przypadku dosłownie miliony wiadomości niezawodnie przechodzą przez mqtt każdego dnia.

+0

Czy twój kod jest open source? Chciałbym rzucić okiem na to lub jakieś dobre tutoriale na ten temat. Dzięki – nnrales

Powiązane problemy