6

上下文:Linux (Ubuntu)、C、ZeroMQ

我有一个侦听ipc://SUB ZeroMQ 套接字(物理上是 Unix 域套接字)的服务器。

我有一个客户端应该连接到套接字,发布它的消息并断开连接。

问题:如果服务器被杀死(或以其他方式异常死亡),套接字文件将保留在原地。如果客户端尝试连接到这个陈旧的套接字,它会阻塞在zmq_term().

如果服务器不存在,我需要防止客户端阻塞,但如果服务器处于活动状态但很忙,则保证交付。

假设我无法通过一些外部魔法(例如通过检查 PID 文件)来跟踪服务器的生命周期。

有什么提示吗?

4

4 回答 4

4

非便携式解决方案似乎是在那里阅读/proc/net/unix和搜索套接字名称。

于 2011-05-04T05:10:51.800 回答
1

如果不显示您的代码,所有这些都是猜测……也就是说……

如果您有一个 PUB/SUB 对,PUB 将在周围徘徊以确保其消息通过。也许您没有使用正确类型的 zmq 对。听起来更像是你有一个 REP/REQ 对。

这样,一旦从客户端(REQ 端)连接,您就zmq_poll可以确定套接字是否可用于写入。如果是,则继续您的写入,否则关闭客户端并处理错误情况(如果它是您的系统中的错误)。

于 2011-04-28T23:13:56.163 回答
0

也许您可以尝试使用自己的本机套接字先连接到套接字。如果连接成功,您的发布者很有可能可以正常工作。

于 2011-04-26T23:44:36.787 回答
0

There is another solution. Don't use ipc:// sockets. Instead use something like tcp://127.0.0.101:10001. On most UNIXes that will be almost as fast as IPC because the OS recognizes that it is a local connection and shortcuts the full IP stack processing.

于 2011-07-01T02:10:19.160 回答