Mam aplikacja Java, łącząc poprzez gniazda TCP do „serwer” w języku C/C++.najszybsza metoda (małe opóźnienie) dla Inter proces komunikacji między Java i C/C++
zarówno serwer aplikacji & są uruchomione na tej samej maszynie, pudełku Solaris (ale rozważamy przejście na Linuksa). typ danych wymienianych jest proste komunikaty (login, logowanie ACK, wtedy klient pyta o coś, odpowiedzi serwera). każda wiadomość ma około 300 bajtów.
Obecnie używamy gniazda, i wszystko jest w porządku, jednak szukam szybszy sposób wymiany danych (mniejsze opóźnienia), stosując metody IPC.
Byłem badania netto i podszedł z odniesieniami do następujących technologii:
- wspólną pamięcią
- rur
- kolejek
- , jak również to, co określane jako DMA (Direct Memory Dostęp)
, ale nie mogłem znaleźć odpowiedniej analizy ich poszczególnych występów, ani jak wdrożyć Nt ich w obu JAVA i C/C++ (aby mogli ze sobą rozmawiać), z wyjątkiem może rur, które mogę sobie wyobrazić, jak to zrobić.
może ktoś komentarz na temat występów & wykonalności każdej metody w tym kontekście? dowolny wskaźnik/link do przydatnych informacji o implementacji?
EDIT/UPDATE
następujący komentarz & odpowiedzi Mam tu znalazłem info o Unix domen gniazda, które wydają się być zbudowany tylko na rurach, i wybaw mnie cały stos TCP. to platforma specyficzny, więc mam zamiar sprawdzając je za pomocą JNI lub obu juds lub junixsocket.
następne możliwe kroki byłaby bezpośrednia implementacja rur, a następnie dzielona pamięć, chociaż byłem ostrzeżony o dodatkowy poziom złożoności ...
dzięki za pomoc
Może to być przesada w twojej sprawie, ale rozważmy http://www.zeromq.org/ – jfs
, co jest interesujące, ale pomysł będzie polegał na zastosowaniu metod "ogólnych" (jak w przypadku dostarczanych przez system OS lub dostarczonych przez język), właśnie dlatego wspomniałem o kolejkach i pamięci współdzielonej. – Bastien
Zobacz także http://stackoverflow.com/questions/904492/ – MSalters