我想通过命令nc连接到由ZeroMQ(IPC模型)创建的Unix Domain Socket。我可以连接,但是当我发送一些消息时,我的deamon正在听这个套接字,不收到任何消息......
我使用nc之类的:
nc -U /path/to/socket
答案 0 :(得分:2)
很好,这是一个更长的版本。
ZeroMQ在流连接的顶部实现了一个消息队列传输系统,如套接字,命名管道等。为此,它在流的顶部运行一个名为ZMTP的协议,它提供了所有的消息划分,通信模式,等等。它还必须处理协议错误,以便给自己一些弹性。
与网络浏览器的比较
与使用http通过套接字进行通信的Web浏览器和Web服务器的想法相同。 Http用于传输html文件。如果查看流经套接字的数据,您会看到html与运行http协议所涉及的消息混淆。而且因为http是基于文本的协议,所以对于人眼来说它看起来还不错。
说同一种语言
因此,当使用zmq库进行通信的程序连接套接字/命名管道/ etc时,它将期望以ZMTP协议定义的方式通过该连接交换数据(与Web浏览器的方式相同)期望使用http与服务器通话。如果另一端的程序也使用zmq,那么他们都会说同一个协议,一切都很好。
不兼容的协议
但是,如果您连接的程序本身并不使用ZMTP协议(如Web浏览器),并且发送了http请求,则它不太可能有任何意义。毫无疑问,zmq库例程将接收构成http请求的字节,尝试解释它,无法理解它,并最终将其拒绝为垃圾。
同样,如果使用zmq库的程序想要发送消息,除非底层ZMTP协议驱动程序是与正在与ZMTP进行通信的其他内容进行通信的内容,否则不会发生任何事情。如果netcap出现任何问题,它就不会看起来像你发送的消息(它将与ZMTP使用的字节混淆)。
人类等效
相当于一位名叫鲍勃的英国人拿起电话并拨打他居住在巴黎的英国朋友Alice的号码。但是,如果一个叫查理的法国人错误地接听了电话(错误号码),他们就很难交换信息。与此同时,在电话线上敲响的夏娃正在笑着对这两个人未能通信的无能为力。 (我对我们英国人说任何其他语言的能力很差)进行了全面和合理的概括。
未来之路
ZMQ绑定可用于几乎所有内容,甚至可能是bash。无论是什么,你都在尝试完成它,这对于你使用的编程或脚本语言获得ZMQ的良好绑定可能是值得的,并使用它来提供正确的ZMQ端点。