J'ai une application Java qui se connecte via un socket TCP à un "serveur" développé en C/C++.
L'application et le serveur fonctionnent sur la même machine, une boîte Solaris (mais nous envisageons de migrer vers Linux à terme). Le type de données échangées est constitué de messages simples (login, login ACK, puis le client demande quelque chose, le serveur répond). Chaque message fait environ 300 octets.
Actuellement, nous utilisons des sockets, et tout va bien, mais je cherche un moyen plus rapide d'échanger des données (latence plus faible), en utilisant des méthodes IPC.
J'ai fait des recherches sur le net et j'ai trouvé des références aux technologies suivantes :
- Mémoire partagée
- tuyaux
- files d'attente
- ainsi que ce que l'on appelle le DMA (Direct Memory Access).
mais je n'ai pas trouvé d'analyse correcte de leurs performances respectives, ni comment les implémenter à la fois en JAVA et en C/C++ (pour qu'ils puissent se parler), à l'exception peut-être de tuyaux que j'ai pu imaginer comment faire.
Quelqu'un peut-il commenter les performances et la faisabilité de chaque méthode dans ce contexte ? Un lien vers des informations utiles sur la mise en œuvre ?
EDIT / UPDATE
En suivant les commentaires et les réponses que j'ai reçus ici, j'ai trouvé des informations sur les Unix Domain Sockets, qui semblent être construites juste au-dessus des pipes, et qui m'épargneraient toute la pile TCP. C'est spécifique à la plateforme, donc je prévois de le tester avec JNI ou soit juds ou junixsocket .
Les prochaines étapes possibles seraient l'implémentation directe des pipes, puis la mémoire partagée, bien qu'on m'ait prévenu du niveau de complexité supplémentaire...
merci pour votre aide