我有现在通过 TCP 通信的客户端和服务器程序。我正在尝试使用 POSIX 消息队列(当然,在客户端和服务器在同一台机器上的情况下)。我希望它能提高性能(特别是通过减少延迟)。
我已经解决了大部分问题,但不确定一件事:如何建立“连接”。服务器同时接受来自多个客户端的连接,所以我很想模拟 TCP 连接建立过程,如下所示:
- 服务器打开一个具有已知名称的队列并连续读取它(它可以
select(2)
与 TCP 一起使用)。 - 客户端打开三个队列:两个具有任意名称(包括一些唯一性,例如 PID 以避免冲突),一个具有服务器使用的众所周知的名称。
- 客户端向服务器的队列发布一条“连接”消息,包括客户端的队列名称(一个指定用于客户端到服务器的流量,另一个用于相反的流量)。
- 服务器打开客户端连接消息中指定的队列,并开始从客户端到服务器的队列中读取(选择)。
- 客户端使用众所周知的名称关闭服务器队列。双向通信使用客户端命名的两个队列(每个方向一个)进行。
您可能会看到该方案与常见的 TCP 方法有何相似之处,这绝非偶然。但是,我想知道:
- 你能想出更好的方法吗?
- 你看到我的方法有什么潜在的问题吗?
- 您是否还有其他想法,包括在同一台机器上使用消息队列而不是 TCP 是否会真正提高性能(延迟)?
请记住,我之前没有使用过 POSIX 消息队列(我之前确实使用过 IBM WebSphere MQ,但那是相当不同的)。平台是Linux。