Tenho um aplicativo Java, conectando-se através de soquete TCP a um "servidor" desenvolvido em C / C ++.
o aplicativo e o servidor estão rodando na mesma máquina, uma caixa Solaris (mas estamos considerando migrar para o Linux eventualmente). tipo de dados trocados são mensagens simples (login, login ACK, então o cliente pede algo, o servidor responde). cada mensagem tem cerca de 300 bytes.
Atualmente estamos usando Sockets, e está tudo bem, porém estou procurando uma forma mais rápida de trocar dados (menor latência), usando métodos IPC.
Tenho pesquisado na Internet e encontrei referências às seguintes tecnologias:
- memoria compartilhada
- tubos
- filas
- bem como o que é referido como DMA (Direct Memory Access)
mas não consegui encontrar uma análise adequada de seus respectivos desempenhos, nem como implementá-los em JAVA e C / C ++ (para que eles possam se comunicar), exceto talvez pipes que eu poderia imaginar como fazer.
Alguém pode comentar sobre o desempenho e a viabilidade de cada método neste contexto? qualquer indicador / link para informações úteis de implementação?
EDITAR / ATUALIZAR
seguindo o comentário e as respostas que obtive aqui, encontrei informações sobre os soquetes de domínio Unix, que parecem ser construídos sobre tubos, e me salvariam toda a pilha TCP. é específico da plataforma, então pretendo testá-lo com JNI ou juds ou junixsocket .
os próximos passos possíveis seriam a implementação direta de tubos e, em seguida, memória compartilhada, embora eu tenha sido avisado sobre o nível extra de complexidade ...
Obrigado pela ajuda