大部分都已经解决了,但有一个问题不确定:如何建立"连接"。服务器同时接受来自多个客户端的连接,因此我想仿照TCP连接建立过程实现这样:
1. 服务器使用已知名称打开一个消息队列,并持续从中读取(可以像TCP一样使用select(2))。 2. 客户端打开三个消息队列:两个使用任意名称(包括一些唯一性,例如PID以避免冲突),一个使用服务器使用的已知名称。 3. 客户端向服务器的消息队列发布"连接"消息,包括客户端队列的名称(其中一个被指定为客户端到服务器流量的队列,另一个被指定为相反方向的队列)。 4. 服务器打开客户端连接消息中命名的队列,并开始从客户端到服务器的队列读取(select)。 5. 客户端关闭服务器使用的已知名称的队列。使用客户端指定的两个队列(每个方向一个)进行双向通信。
你可能已经看出这个方案与常见的TCP方法相似,这不是巧合。但我想知道:
1. 你能想到更好的方法吗? 2. 你是否看到我的方法存在潜在问题? 3. 你是否有其他想法,包括使用消息队列而不是TCP在同一台机器上实际上会提高性能(延迟)的可能性?
请记住,我以前没有使用过POSIX消息队列(我曾经使用IBM WebSphere MQ,但那是非常不同的)。平台是Linux。