首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用POSIX消息队列而不是TCP套接字--如何建立“连接”?

使用POSIX消息队列而不是TCP套接字--如何建立“连接”?
EN

Stack Overflow用户
提问于 2009-01-03 22:48:54
回答 5查看 14.6K关注 0票数 16

我有客户端和服务器程序,现在通过TCP进行通信。我正在尝试使用POSIX消息队列(当然,在客户机和服务器位于同一台计算机上的情况下)。我希望它能提高性能(特别是通过减少延迟)。

我已经解决了其中的大部分问题,但我不确定一件事:如何建立“联系”。服务器同时接受来自多个客户端的连接,因此我很想模拟TCP连接建立过程,如下所示:

  1. Server打开一个具有著名名称的队列,并不断地从中读取(它可以像TCP那样使用select(2) )。
  2. 客户端打开三个队列:两个具有任意名称(包括一些惟一性,比如PID以避免冲突),另一个具有服务器使用的知名名称。
  3. 客户端向服务器队列发布一条“连接”消息,包括客户端的队列名称(一个用于客户端到服务器的通信量,另一个用于converse).
  4. Server )打开客户端连接消息中指定的队列,并开始从客户端到服务器端队列中读取(选择)。
  5. 客户端使用众所周知的名称关闭服务器队列。双向通信使用客户端指定的两个队列(每个方向一个)。

您可能会看到此方案与常见的TCP方法是如何相似的,这不是偶然的。然而,我想知道:

  1. 您能想出更好的方法吗?
  2. 您认为我的方法有什么潜在的问题吗?
  3. 您有其他想法吗?包括在同一台机器上使用消息队列而不是TCP实际上会提高性能(延迟)的可能性吗?

请记住,我以前没有使用过POSIX消息队列(前一段时间我确实使用过WebSphere MQ,但这是完全不同的)。平台是Linux。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-28 04:03:14

最后,我以一些增强来实现它,就像我所描述的那样:

  • 在步骤2中,我使用GUID作为队列名,而不是包含客户端的PID。在步骤4中,我添加了从服务器向客户端发送“接受”消息。
  • 当任何一方希望结束通信时,它发送“断开连接”消息。

握手比TCP简单,但似乎就足够了。

至于延迟:它要好得多。使用POSIX消息队列,而不是在同一台计算机上使用TCP,大约可以减少75%的延迟。我的消息大约是100个字节。

票数 7
EN

Stack Overflow用户

发布于 2012-05-03 02:44:07

我比较了posix MQ和一对TCP/IP套接字的性能。

演示程序有两个线程,一个用于写入,另一个用于阅读。

其结果是posix MQ更快,

  • MQ 460000 tps
  • 套接字对400000 tps
票数 3
EN

Stack Overflow用户

发布于 2009-11-11 09:21:58

我也遇到过类似的问题,我开发了实时应用程序,需要具有类似sockets功能和最小延迟的IPC技术。

您是否将基于POSIX-MQ的解决方案与UNIX本地套接字或TCP套接字进行了比较?

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/410039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档