2012-06-26 11 views
6

W C mamy gniazda i deskryptory, można po prostu wziąć jeden z nich i przekazać je do wątku, dzięki czemu możliwe jest przyjmowanie połączeń przychodzących i przekazywanie pracować na wątku, który Ci się podoba, a wątek może sam wysłać odpowiedź.ZeroMQ: jak uzyskać wielowątkowość typu C

Moje pytanie brzmi, w jaki sposób mogę to osiągnąć za pomocą ZeroMQ? Wydaje się, że w przypadku wzoru żądania-odpowiedzi nie mogę wysyłać i odbierać asynchronicznie, odpowiedzi muszą być sekwencyjne, moim celem byłoby posiadanie wielu klientów na jednym serwerze, wysyłanie odpowiedzi nie w kolejności.

Zerknąłem na wzór odpowiedzi na żądanie, ale interfejs API wyraźnie stwierdza, że ​​używanie tego gniazda z wieloma wątkami jest złym pomysłem. Może coś przeoczyłem lub ZeroMQ jest bardziej inteligentny niż ja wiem. Jeśli potrzebujesz dodatkowych informacji, opublikuj komentarz, a ja dołożę wszelkich starań, aby podać informacje.

miałem również zapoznać się z podanymi przykładami: Code Examples

Oto opis Gniazdo: ZMQ-Socket

Odpowiedz

3

Po wielu dniach poszukiwań, przyjazny człowiek w IRC w zeromq kanale pod warunkiem pomoc dla mnie.

Zaktualizowany link na wypadek, gdyby ktoś nadal tego szukał. Powinny być trwałe! http://zguide.zeromq.org/

Ten przykład działa naprawdę dobrze, jest łatwy w adaptacji, użyłem doładowania z gwintem.

+0

Niestety ta strona nie istnieje. Chcesz go opublikować tutaj, więc jest to odpowiedź? –

+0

Witam d -_- b tutaj jest inna opcja dla niego z waybackmachine http://web.archive.org/web/20120704201150/http://www.zeromq.org/blog:multithreaded-server –

+0

Dobra lektura. Dzięki Oliver. –

2

Jak rozumiem Potrzebny jest serwer, który chcesz, aby nowy wątek dla każdego połączenia przychodzącego i każdego wątku odpowiedzieć dokładnie jedno połączenie, a jeśli tak to przykładowy kod, który dokładnie to zrobić: http://www.kieser.net/linux/java_server.html

+0

Dzięki Shahryar za wysiłek, moja prośba o to naprawdę z "zeroMq" powodem tego jest skalowalność, chciałbym móc później rozszerzyć aplikację, aby pracownicy na różnych maszynach wykonywali zadania, z zeromq można "zgodnie z modelem" rozwinąć mój model z biblioteką do mają inny wzór, a więc mają większą skalowalność .. –

2

Często, gdy próbujesz dostosować istniejące projekty do 0MQ, masz kłopoty. Tutaj istniejący projekt przekazuje gniazda (zazwyczaj HTTP) do procesów potomnych lub wątków, a następnie pozwala im odpowiedzieć. To nie jest bardzo elegancki projekt. Działa, ponieważ każde nowe połączenie istnieje jako gniazdo, a ponieważ po wysłaniu odpowiedzi gniazdo jest niszczone. Żadne z nich nie ma zastosowania do aplikacji 0MQ.

Konstrukcja 0MQ używa gniazda ROUTER Frontend, które ściąga żądania od klientów. Następnie przekazuje te żądania do wątków roboczych przez gniazda inproc: //, używając DEALERA z zaplecza, aby rozliczyć żądania. Wątki robocze używają gniazda REP do odbierania żądań i ponownego wysyłania odpowiedzi. Główny wątek następnie odpytuje na obu gniazdach frontendu i backendu, po prostu kierując wiadomości między tymi dwoma.

co jest, co ten stary blog artykuł wyjaśnia (używając nazw spuścizna XREP/XREQ), i to wyjaśnione bardziej szczegółowo w przykładach w wielu językach tutaj: http://zguide.zeromq.org/page:all#Multithreading-with-MQ