Cross platform IPC

Szukam sugestii na temat możliwych mechanizmów IPC, które są:

  • Cross platform (przynajmniej Win32 i Linux)
  • prosty do zaimplementowania w C++ jak również w najpopularniejszych językach skryptowych (perl, ruby, python, itp.).
  • Wreszcie, prosty w użyciu z punktu widzenia programowania!

Jakie mam opcje? Programuję pod Linuksem, ale chciałbym, aby to, co piszę, było w przyszłości przenośne na inne osy. Ja myślałem o użyciu gniazd, nazwanych rur, lub czegoś w rodzaju DBus.

Author: Azat Ibrakov, 2008-09-13

16 answers

Pod względem prędkości najlepszym wieloplatformowym mechanizmem IPC będą rury. Zakłada to jednak, że chcesz wieloplatformowego IPC na tej samej maszynie. Jeśli chcesz móc rozmawiać z procesami na zdalnych maszynach, zamiast tego będziesz chciał użyć gniazd. Na szczęście, jeśli mówimy przynajmniej o TCP, gniazda i rury zachowują się prawie tak samo. Podczas gdy interfejsy API do ich konfigurowania i łączenia są różne, oba działają po prostu jak strumienie danych.

The trudną częścią nie jest jednak kanał komunikacyjny, ale komunikaty, które nad nim przekazujesz. Naprawdę chcesz spojrzeć na coś, co wykona weryfikację i parsowanie za Ciebie. Polecam zajrzeć do buforów protokołu Google . Zasadniczo tworzysz plik specyfikacji opisujący obiekt, który chcesz przekazać między procesami, a istnieje kompilator, który generuje kod w wielu różnych językach do odczytu i zapisu obiektów, które pasują do specyfikacji. Jest o wiele łatwiej (i mniej podatne na błędy) niż próba wymyślenia protokołu komunikacyjnego i parsera.

 48
Author: Douglas Mayle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:22:37

Dla C++ sprawdź Boost IPC .
Prawdopodobnie możesz również utworzyć lub znaleźć powiązania dla języków skryptowych.

W przeciwnym razie, jeśli jest to naprawdę ważne, aby móc współpracować z językami skryptowymi najlepiej jest po prostu użyć plików, rur lub gniazd lub nawet wyższego poziomu abstrakcji jak HTTP.

 15
Author: Brian R. Bondy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 18:18:59

Dlaczego nie D-Bus? Jest to bardzo prosty system przekazywania wiadomości, który działa na prawie wszystkich platformach i jest zaprojektowany z myślą o solidności. Jest obsługiwany przez prawie każdy język skryptowy w tym momencie.

Http://freedesktop.org/wiki/Software/dbus

 9
Author: apenwarr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 17:04:46

Możesz spróbować YAMI , jest bardzo prosty, ale funkcjonalny, przenośny i jest wyposażony w Wiązanie do kilku języków

 7
Author: user10042,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 22:11:03

Jeśli potrzebujesz przenośnego, łatwego w użyciu, wielojęzycznego i LGPL ed rozwiązania, polecam ci ZeroMQ :

  • niesamowicie szybki, prawie liniowy, skalowalny i wciąż prosty.
  • nadaje się do prostych i złożonych systemów / architektur.
  • Dostępne bardzo potężne Schematy komunikacji: REP-REP, PUSH-PULL, pub-SUB, PAIR-PAIR.
  • możesz skonfigurować protokół transportu tak, aby był bardziej wydajny, jeśli przekazujesz wiadomości między wątkami (inproc://), procesy (ipc://) lub maszyny ({tcp|pgm|epgm}://), Dzięki inteligentnej opcji zmniejszenia części kosztów ogólnych Protokołu w przypadku połączeń między maszynami wirtualnymi VMware(vmci://).

Do serializacji proponowałbym MessagePack lub bufory Protokołu (o których inni już wspominali), w zależności od potrzeb.

 7
Author: Peque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 09:37:42

A może oszczędność Facebook ' a ?

Thrift to framework do tworzenia skalowalnych usług międzyjęzykowych. Łączy stos oprogramowania z silnikiem generowania kodu, aby zbudować usługi, które działają wydajnie i bezproblemowo między C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk i OCaml.

 5
Author: Swaroop C H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 16:21:24

Myślę, że będziesz chciał coś opartego na gniazdach.

Jeśli chcesz RPC, a nie tylko IPC, proponuję coś w rodzaju XML-RPC / SOAP, który działa przez HTTP i może być używany z dowolnego języka.

 5
Author: Douglas Leeder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 17:17:20

Yami-Yet Another Messaging Infrastructure to lekki framework komunikacyjny i sieciowy.

 5
Author: mloskot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-25 23:52:16

Jeśli chcesz spróbować czegoś nieco innego, jest platforma ICE z ZeroC. Jest open source i jest obsługiwany na prawie każdym systemie operacyjnym, o którym możesz pomyśleć, a także posiada obsługę języków C++, C#, Java, Ruby, Python i PHP. Wreszcie, jest bardzo łatwy w prowadzeniu(mapowania językowe są dostosowane do naturalnego dopasowania do każdego języka). Jest również szybki i wydajny. Istnieje nawet wersja cut-down dla urządzeń.

 4
Author: Jason Etheridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:39:28

Przetwarzanie rozproszone jest zwykle złożone i zaleca się używanie istniejących bibliotek lub frameworków zamiast wymyślania nowego koła. Poprzedni poster już wyliczył kilka z tych bibliotek i frameworków. W zależności od potrzeb możesz wybrać bardzo niski poziom (jak gniazda) lub wysoki poziom (jak CORBA). Nie może być ogólnej odpowiedzi" użyj tej". Musisz nauczyć się programowania rozproszonego, a wtedy znacznie łatwiej będzie wybrać odpowiednia Biblioteka lub framework do zadania.

Istnieje szalenie używany framework C++ do obliczeń rozproszonych o nazwie ACE i CORBA ORB TAO (który jest zbudowany na ACE). Istnieją bardzo dobre książki o ACE http://www.cs.wustl.edu/align = "center" bgcolor = "# e0ffe0 " /cesarz chin / / align = center / Trzymaj się!

 3
Author: lothar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-08 22:55:24

Nie staje się to prostsze niż używanie rur, które są obsługiwane na każdym systemie operacyjnym, który znam, i mogą być dostępne w prawie każdym języku.

Zobacz ten tutorial.

 3
Author: Maximilian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-05 22:11:51

Proponuję skorzystać z biblioteki plibsys C. Jest bardzo prosty, lekki i wieloplatformowy. Wydany na licencji LGPL. Zapewnia:

    [5]} nazwane regiony pamięci współdzielonej dla całego systemu (implementacje Systemu V, POSIX i Windows); [5]} nazwane semafory systemowe do synchronizacji dostępu (implementacje Systemu V, POSIX i Windows);
  • nazwana implementacja współdzielonego bufora systemowego oparta na pamięci współdzielonej i semaforze;
  • sockets (TCP, UDP, SCTP) z obsługą IPv4 i IPv6 (implementacje UNIX i Windows).

Jest to łatwa w użyciu biblioteka z całkiem dobrą dokumentacją. Ponieważ jest napisany w języku C, można łatwo tworzyć powiązania z języków skryptowych.

W przypadku konieczności przekazywania dużych zbiorów danych pomiędzy procesami (zwłaszcza jeśli niezbędna jest szybkość) lepiej jest użyć pamięci współdzielonej do przekazania samych danych, a socketów do powiadomienia procesu, że dane są gotowe. Możesz zrobić to w następujący sposób:

  • a proces puts dane do segmentu pamięci współdzielonej i wysyła powiadomienie za pośrednictwem gniazda do innego procesu; ponieważ powiadomienie jest zwykle bardzo małe, narzut czasu jest minimalny;
  • inny proces otrzymuje powiadomienie i odczytuje dane z segmentu pamięci współdzielonej; następnie wysyła powiadomienie, że dane zostały odczytane z powrotem do pierwszego procesu, aby mógł podać więcej danych.

To podejście może być zaimplementowane w sposób wieloplatformowy.

 3
Author: Alexander Saprykin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-19 18:54:44

Gniazda TCP do localhost FTW.

 2
Author: GEOCHET,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 17:03:28

Python ma całkiem dobrą bibliotekę IPC: zobacz https://docs.python.org/2/library/ipc.html

 0
Author: Adam Rosenfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-28 09:59:48

Xojo posiada wbudowaną wieloplatformową obsługę IPC z klasą IPCSocket . Chociaż oczywiście nie można "zaimplementować" go w innych językach, można go użyć w aplikacji konsoli Xojo i wywołać go z innych języków, dzięki czemu ta opcja może być bardzo prosta dla Ciebie.

 0
Author: Paul Lefebvre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-24 20:22:13

Google protobufs to naprawdę zły pomysł, ponieważ chcesz łatwego w utrzymaniu i debugowaniu kodu. to zbyt łatwe dla ludzi, aby go nadużywać i używać go do zanieczyszczania kodu. pliki proto są ładne, ale w zasadzie to samo, co plik nagłówkowy struktury, a kod generowany przez niego jest kompletnym badziewiem, co sprawia, że zastanawiasz się, czy naprawdę jest to Ukryte narzędzie ataku do sabotażu projektów oprogramowania zamiast ich automatyzacji. Po użyciu go przez chwilę jest prawie niemożliwe, aby usunąć go z kodu. you are better Wyłącz Tylko za pomocą pliku nagłówkowego struktur formatu fix, które są łatwo debugowane.

Jeśli naprawdę potrzebujesz kompresji, przełącz się na mapowanie adresów/danych struktur archiwizacji zdalnie... wtedy pakiety są tylko pakietem par adres / dane... również struktura, która jest bardzo łatwa do zautomatyzowania za pomocą własnych skryptów Perla, które wytwarzają kod, który jest czytelny dla człowieka i debugowalny

 -5
Author: googleprotobuf isjunk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-30 17:37:19