nc访问的ZeroMQ IPC Unix Domain Socket

Posted

技术标签:

【中文标题】nc访问的ZeroMQ IPC Unix Domain Socket【英文标题】:ZeroMQ IPC Unix Domain Socket accessed by nc 【发布时间】:2016-12-30 13:19:50 【问题描述】:

我想通过命令 nc 连接到 ZeroMQ(IPC 模型)创建的 Unix Domain Socket。我可以连接,但是当我发送一些消息时,正在监听这个套接字的我的守护进程没有收到任何消息...

我正在使用 nc 之类的:

nc -U /path/to/socket

【问题讨论】:

你通过 nc 发送什么?是否匹配zmq消息协议? 添加到@David 的评论中,使用 ZeroMQ 的程序期望与另一个使用相同协议 ZMTP 的程序通信。最简单的方法是让另一个程序也使用 ZeroMQ 库。 netcat 不是这样的。 ZeroMQ 在流连接(如套接字、管道等)之上实现了一个消息队列,因此人们不会期望看到您的消息数据从套接字中出现。无论您尝试做什么,几乎可以肯定,ZMQ 有一个适合您选择的语言的绑定,甚至可能是 bash。 @bazza 请将此添加为答案,我会接受 【参考方案1】:

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

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

与网络浏览器的比较

Web 浏览器和 Web 服务器使用 http 通过套接字进行通信的想法相同。 Http用于传输html文件。如果您查看流经套接字的数据,您会看到 html 与运行 http 协议所涉及的消息混合在一起。而且因为 http 是基于文本的协议,所以在人眼看来还可以。

说同一种语言

因此,当使用 zmq 库进行通信的程序连接套接字 / 命名管道 / 等时,它将期望以 ZMTP 协议定义的方式通过该连接交换数据(与 Web 浏览器相同的方式)期望使用 http 与服务器通信)。如果另一端的程序也在使用 zmq,那么它们都在使用相同的协议,一切都很好。

不兼容的协议

但是,如果您连接一个本身不使用 ZMTP 协议的程序(例如 Web 浏览器)并发送一个 http 请求,则它可能没有任何意义。毫无疑问,zmq 库例程会接收构成 http 请求的字节,尝试对其进行解释,但无法理解,最终将其作为垃圾拒绝。

类似地,如果使用 zmq 库的程序想要发送消息,除非底层 ZMTP 协议驱动程序的内容是它正在与其他使用 ZMTP 的东西进行通信,否则不会发生任何事情。如果从 netcap 中出现任何内容,它看起来不会像您发送的消息(它会与 ZMTP 使用的字节混淆)。

相当于人类

相当于是一个叫 Bob 的英国人拿起电话并拨打他住在巴黎的英国朋友 Alice 的号码。但是,如果一个叫查理的法国人接错电话(号码错误),他们就很难交换信息。与此同时,窃听电话线的夏娃正在为这两个人尝试沟通失败的无能而大笑。 (我对我们英国人说任何其他语言的能力很差进行了全面且部分合理的概括。

前进的道路

几乎所有东西都可以使用 ZMQ 绑定,甚至可能是 bash。无论您尝试完成什么,都值得为您使用的编程或脚本语言获得一个体面的 ZMQ 绑定,并使用它来提供适当的 ZMQ 端点。

【讨论】:

您是否介意扩展您个人资料中的“噩梦”部分——在您允许记住的 InMOS Transputer 时代的内容中?特别令人感兴趣的是(“公正”SEQ)C 语言对完全硬件支持PAR occam 的表达偏好的基础是什么?谢谢。跨度> 调试是一场真正的噩梦。除了连接到主机 PC 的网络中的一台 Transputer 之外,您甚至无法进行 printf 调试。很棒的硬件,很棒的语言(我使用了他们的 C,而不是 Occam),开发起来非常困难和缓慢,一旦运行良好就非常令人满意。英特尔一达到 66MHz,Inmos 就完蛋了。您可以从 Intel x86 上的单个线程获得与从大型 Transputer 网络获得的相同的性能。另外,他们迟到了 T9000。 但是是的,语言和硬件的并行性非常好。如果我实现自己的 CSP 框架,我仍然调用主要的例程 procAlt()。我认为这相当于 Inmos C 的 Occam PAR。快乐但艰难的日子。奇怪的是,Inmos 的一些硅意外地非常坚硬,所以它被用于像乔托这样的航天器(如果我没记错的话) 我隐约记得,Meiko Compute Surface 的工具使用起来更友好一些,而且它们制作了令人印象深刻的超级计算机式机柜,运行着令人印象深刻的光线追踪演示。跨度> Meiko 了解动态互连的价值。仅使用 Transputer,您就可以将它们以固定的拓扑连接在一起,这意味着您要么必须拥有固定的拓扑应用程序,要么自己处理消息路由。 Meiko 在 Transputers 之间做了一个互连芯片,这意味着连接不再是硬连线的,有些可以是运行时动态的。今天的等价物是您在 OpenVPX 系统中间的卡上找到的 Serial RapidIO 开关芯片,尤其是来自 www.mrcy.com 的那些。

以上是关于nc访问的ZeroMQ IPC Unix Domain Socket的主要内容,如果未能解决你的问题,请参考以下文章

zeromq实践

C++跨平台:ZeroMQ的简单示例

C++跨平台:ZeroMQ的简单示例

Perl 的排队系统

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

使用 Unix 域套接字进行电话对话的 IPC 机制