在最近面试中,我被问到一个问题:相较于其他IPC方法,Socket在IPC中的优缺点是什么?但我还没有找到确切的答案。
如果您能提供任何帮助,将不胜感激。
套接字的另一个优点是:使用套接字的应用程序可以轻松分布 - 也就是说,它可以在一个主机上运行,也可以在多个主机上分散运行,而不需要太多的努力。当然,这取决于应用程序的性质。
您可以连接一个简单的客户端进行测试(手动输入数据,查看响应)。 这对于调试、模拟和黑匣子测试非常有用。
您可以在不同的机器上运行进程。如果您从事嵌入式软件开发,这对于可扩展性非常有用,并且在调试/测试方面非常有帮助。
将您的进程公开为服务变得非常容易
但是也存在缺点
与为单台计算机优化的IPC相比,开销更大。特别是如果需要性能并且您知道进程都在同一台机器上,则共享内存更好。
安全性 - 如果您的客户端应用程序可以连接,那么任何其他人也都可以连接,如果您没有谨慎进行身份验证。如果您不加密,则数据也会被嗅探,并且如果您没有至少对发送的数据进行签名,则数据可以被修改。
使用真正的消息队列往往会使您留下固定大小的消息。如果您有大量大小差异巨大的消息,这可能会成为性能问题。使用套接字可以解决这个问题,但是您需要尝试将此功能包装成与队列完全相同的方式,这很难在细节上得到正确处理,特别是像阻塞/非阻塞和原子性这样的方面。
共享内存快速但需要管理(最终编写malloc的版本来管理SHM),而且您必须以某种方式进行同步和锁定。虽然您可以使用库来帮助处理此问题,但可用性取决于您的环境和语言。
队列很容易,但它们具有作为我的套接字讨论优点的缺点。
Pipes已经由Blagovests回答了这个问题。
对于这种类型的内容,我建议阅读W. Richard Stevens关于IPC和套接字的书籍。没有比他更好的解释了! :-)