Articles of zeromq

在nanomsg中可以使用IP多播吗?

我如何在nanomsg中实现IP多播? 我知道在ZeroMQ消息传递中,IP多播是通过实用通用多播(PGM)协议实现的。 在nanomsg中有没有办法实现IP多播?

zeromq同时订阅和发布

我试图在Python中使用debian / multiprocess情况下的zeromq。 我有几个进程解码来自多个传感器的原始数据,并在zmq中发布。 到现在为止还挺好。 我有一个计算过程,它订阅zmq上的原始数据,并执行一些计算。 然后需要发布其他进程的答案来logging和使用。 因此,我的计算过程需要同时订阅和发布。 import zmq import json context = zmq.Context() sub = context.socket(zmq.SUB) sub.setsockopt(zmq.SUBSCRIBE, '') sub.setsockopt(zmq.RCVBUF, 0) sub.bind("tcp://127.0.0.1:5000") pub = context.socket(zmq.PUB) pub.bind("tcp://127.0.0.1:5000") 我尝试了以上,但没有运气。 它返回一个错误… File "socket.pyx", line 465, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4749) zmq.core.error.ZMQError: Address already in use 我阅读文档,谷歌等,但现在我完全卡住了。

如何检查在ZeroMQ PUB-SUB模式下发送的消息是否由于HWM而丢失

我使用ZeroMQ(更具体地说是CZMQ)在Linux中为IPC实现了一个消息总线。 这是我实施的。 我的问题是, 如何知道当发布者缓冲区已满时,发送删除了消息? 在我简单的testing设置中,我正在使用带有代理的发布者订阅者。 我有一个快速的发件人和一个非常缓慢的接收器,导致消息打HWM和发送。 我的例外是,发送将失败,“消息丢失”的错误,但事实并非如此。 zmq_msg_send()不会给我任何错误,即使消息被丢弃(我可以通过查看消息在订阅端的差距来validation这一点)。 如何知道消息何时被丢弃? 如果这是预期的行为,并且ZeroMQ不让我们知道,那么find我的发送是否丢弃消息的解决方法是什么?

ZeroMQ:每个数据types的套接字还是只有一个套接字?

我有一个程序从另外10个(传感器读取)程序(都由我自己控制)接收信息。 我现在想让他们使用ZeroMQ进行通信。 对于大部分队列来说,重要的是中央接收程序总是有最新的传感器数据,所有旧的信息不再重要。 如果一对夫妇的信息迷路了,我不在乎。 所以对于他们所有人,我开始了一个单独的PUB/SUBsockets; 每个程序一个。 但我不确定这是否是正确的做法。 据我所知,我有两个select: 为每个程序制作一个单独的套接字,然后循环读出它们。 这样我通过套接字知道我收到的信息是什么(我通常只是发送一个int )。 使所有的程序连接到一个套接字,并与每条消息我发送一个string告诉接收端的消息是关于什么。 所有的连接都是基于PUB/SUB ,所以创build一个套接字就可以解决问题。 我只是不确定这是否是最有效的方法。 所有的提示,欢迎!

如何将一个ZeroMQ套接字集成到一个glib主循环中?

我想给一个glib程序添加一个ZeroMQ套接字。 pitty是,一个zmq套接字不是poll() ,它们给它们的实现,它重载了旧的poll() func。 我怎么能有效地将它整合到主循环? 我尝试使用他们的投票( zmq_poll() ),而不是默认的,但没有好办法给它的zmq套接字,除了使其成为一个global 。 定义一个新的GSource工作,但它可以获得高CPU使用率(通过设置timeout = 0 )或任意轮询超时(例如设置timeout = 100轮询至less每100毫秒),这是不是真的有效,因为有投票的可能性。

识别套接字客户端的远程断开连接

如何从套接字客户端程序中发现远程连接已closures(例如,服务器已closures)。 当我做一个recv和服务器closures它阻止,如果我没有设置任何超时。 但是在我的情况下,我不能放任何可靠的超时值来解决它,因为否则即使服务器启动recv超时,但响应确实需要超过我设置的超时值。

未findGLIBCX_3.4.21

我很抱歉,如果这不是正确的地方,但经过两天处理同样的错误,我希望有人会有一个答案。 我试图使用节点模块zerorpc ,它使用zmq ,但是,当试图运行一个小例子,我得到以下错误: Error: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by myFilepath/node_modules/zmq/build/Release/zmq.node) 我正在使用AWS提供的亚马逊Linux实例(amazon web services)。 执行sudo yum update ,可用的最新版本是GLIBCXX_3.4.19。 我检查使用以下命令: strings /usr/lib64/libstdc++.so.6.19 | grep GLIBCXX strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 最初,我得到这个错误使用brew install zmq ,所以我卸载它,并尝试按照zeromq网站的指示安装zmq: git clone https://github.com/zeromq/libzmq ./autogen.sh && ./configure && make -j 4 make check && make install && sudo ldconfig 我对这些指令的唯一区别是我单独运行它们而不是使用&& ,并且在每个指令前添加了sudo。 […]

ZeroMQ:检查是否有人在监听Unix域套接字

上下文:Linux(Ubuntu),C,ZeroMQ 我有一个服务器侦听ipc:// SUB ZeroMQ套接字(物理上是一个Unix域套接字)。 我有一个客户端应该连接到套接字,发布它的消息并断开连接。 问题是:如果服务器被终止(或以其他方式非正常死亡),套接字文件保持原位。 如果客户端试图连接到这个过时的套接字,它将在zmq_term()中被zmq_term() 。 如果服务器不在那里,我需要阻止客户端阻塞,但是如果服务器还活着但是很忙,就要保证交付。 假设我不能通过一些外部魔法来追踪服务器的生命周期(例如通过检查一个PID文件)。 任何提示?

如何build立一个项目(如zeromq)作为静态库,并将其链接到我的项目

我想在我的项目中使用zeroMQ,并运行configuration如下将libaray构build到我的home文件夹中 ./configure –enable-static –disable-shared –prefix=/home/xx/out 然后我链接我的项目 gcc -o myproject xc yc /home/xx/out/libzmq.a 但是仍然有很多链接错误,如下所示: ../zmq/lib/libzmq.a(libzmq_la-ip.o): In function zmq::resolve_ip_interface(sockaddr_storage*, unsigned int*, char const*)': /home/sureone/share/zeromq-2.2.0/src/ip.cpp:221: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /home/sureone/share/zeromq-2.2.0/src/ip.cpp:222: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' ../zmq/lib/libzmq.a(libzmq_la-ip.o): In function zmq::resolve_ip_hostname(sockaddr_storage*, unsigned int*, char const*)': /home/sureone/share/zeromq-2.2.0/src/ip.cpp:314: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, uns […]

坏的地址在cv :: Mat

我正在制作一个使用opencv和zeromq的C ++应用程序。 而且我试图通过zmq tcp套接字发送一个cv :: Mat对象(CV_8UC3)时遇到了一些问题。 这是更新的代码示例: #include <iostream> #include <zmq.hpp> #include <pthread.h> #include <opencv/cv.h> #include <opencv/highgui.h> using namespace std; int main() { zmq::context_t ctx( 1 ); zmq::socket_t mysocket( ctx, ZMQ_PUSH ); mysocket.bind( "tcp://lo:4050" ); cv::VideoCapture capture( CV_CAP_ANY ); capture.set( CV_CAP_PROP_FRAME_WIDTH, 640 ); capture.set( CV_CAP_PROP_FRAME_HEIGHT, 480 ); cv::Mat3b frame; capture >> frame; //First one is […]