2016-12-30 77 views
0

我想通过命令NC连接到由ZeroMQ(IPC模型)创建Unix域套接字访问。我可以连接,但是当我发送一些消息,然后,我的守护进程,这是听了这个插座,是得到任何消息......ZeroMQ IPC Unix域套接字数控

我使用NC喜欢:

nc -U /path/to/socket 
+0

你通过NC发送什么?它与zmq消息协议相匹配吗? – David

+0

要添加到来自@David的评论,使用ZeroMQ的程序希望与另一个讲述相同协议ZMTP的程序交谈。最简单的方法是使用另一个也使用ZeroMQ库的程序。 netcat是不是。 ZeroMQ在诸如套接字,管道等流连接之上实现了一个消息队列,所以不会期望看到你的消息数据从套接字中出现。无论你想要做什么,几乎可以肯定的是,ZMQ对于你选择的语言来说是合适的绑定,甚至可能是bash。 – bazza

+0

@bazza请将此添加为答案,我会接受 – user3025978

回答

1

很好,这是一个更长的版本。

ZeroMQ在流连接的顶部(如套接字,命名管道等)实现了一个消息队列传输系统。为此,它在流的顶部运行一个名为ZMTP的协议,该协议提供所有消息分界,通信模式等等。它还必须处理协议错误,以提供一定的弹性。

比较到Web浏览器

这是同样的想法,Web浏览器和Web服务器使用http通过套接字通信。 Http用于传输html文件。如果您查看通过套接字传输的数据,则会看到与运行http协议涉及的消息混合的html。而且由于http是一个基于文本的协议,它对人眼来说看起来还算不错。

使用同一种语言

因此,当使用该ZMQ库用于通信的程序连接的插座/命名管道/等等,它将被期待在由所定义的方式中的连接来交换数据ZMTP协议(与Web浏览器期望使用http与服务器通信的方式相同)。如果另一端的程序也使用zmq,那么他们都在说同一个协议,并且一切都很好。

不兼容的协议

但是,如果连接的程序本身并不使用ZMTP协议,如网页浏览器,并发送一个HTTP请求时,它不可能什么意思。 zmq库例程无疑会收到构成http请求的字节,试图解释它,不能理解它,并最终将其作为垃圾拒绝。

同样,如果使用了ZMQ库的程序要发送消息,什么都不会发生,除非底层ZMTP的协议驱动程序的内容,它与别的东西,说话ZMTP通信。如果有任何东西出现在netcap上,它将看起来不像你发送的消息(它将被ZMTP使用的字节混淆)。

相当于人类

相当于是一个英国人叫鲍勃拿起电话并拨号,他的英国朋友叫爱丽丝住在巴黎。但是,如果一个叫查理的法国人错误地接听了电话(错误的号码),他们将很难交换信息。与此同时,谁在窃听电话线的伊芙正在嘲笑这两个人失败的沟通失败。 (我对我们的英语人士讲其他语言的能力差的情况进行了广泛而部分合理的概括)。

前进道路

有一个ZMQ几乎一切,甚至可能是bash的结合使用。不管你想要达到什么目的,在为你使用的编程语言或脚本语言获得体面的ZMQ绑定或者使用它来提供适当的ZMQ端点时,它可能都是值得的。

+0

您是否愿意好好扩展您的个人资料中的“噩梦”部分 - 您在InMOS Transputer时代能够记住的内容?特别感兴趣的是,对完全硬件支持的“PAR”occam表示偏好(“恰好”,“SEQ”)C语言的基础是什么?**谢谢。 – user3666197

+0

调试是一个真正的噩梦。除了在连接到主机PC的网络中的一台Transputer之外,您甚至无法进行printf调试。伟大的硬件,伟大的语言(我用他们的C,而不是奥卡姆),非常努力和缓慢的发展,一旦运行良好,非常令人满意。一旦Intel达到66MHz,Inmos就注定要失败。您可以从一个可以从大型Transputers网络获得的Intel x86上的单个线程获得相同的性能。另外,他们迟到了T9000。 – bazza

+0

但是,语言和硬件的并行性非常好。如果我实现我自己的CSP框架,我仍然会调用主要的例程procAlt()。我想这就是Inmos C的Occam的PAR。快乐,但艰难的日子。奇怪的是,Inmos的一些硅片偶然很难被使用,所以它被用在像乔托这样的一些航天器上(如果我的记忆是正确的) – bazza