我有一个 Java 应用程序,通过 TCP 套接字连接到用 C/C++ 开发的“服务器”。
应用程序和服务器都在同一台机器上运行,一个 Solaris 机器(但我们正在考虑最终迁移到 Linux)。交换的数据类型是简单的消息(登录、登录 ACK、然后客户端请求某些内容、服务器回复)。每条消息大约 300 字节长。
目前我们正在使用套接字,一切都很好,但是我正在寻找一种更快的方式来交换数据(更低的延迟),使用 IPC 方法。
我一直在研究网络并提出了对以下技术的参考:
- 共享内存
- 管道
- 排队
- 以及所谓的 DMA(直接内存访问)
但是我找不到对它们各自性能的正确分析,也找不到如何在 JAVA 和 C/C++ 中实现它们(以便它们可以相互交谈),除了我可以想象如何做的管道。
在这种情况下,任何人都可以评论每种方法的性能和可行性吗?任何指向有用实现信息的指针/链接?
编辑/更新
在我在这里得到的评论和答案之后,我找到了有关 Unix Domain Sockets 的信息,它似乎是在管道上构建的,并且可以为我节省整个 TCP 堆栈。它是特定于平台的,因此我计划使用 JNI 或juds或junixsocket 对其进行测试。
下一个可能的步骤是直接实现管道,然后是共享内存,尽管我已经被警告过额外的复杂性......
感谢您的帮助