我有一个使用ZeroMQ进行消息传递的C++应用程序。但它还必须为基于AJAX / Comet的web服务提供SGCI连接。
为此,我需要一个普通的TCP套接字。我可以通过普通的Posix插口做到这一点,但为了保持跨平台可移植性,并使我的生活变得更容易(我希望...)我在考虑使用Boost::ASIO。
但是现在我遇到了ZMQ想要使用它自己的zmq_poll()和ASIO它的io_service.run()的冲突……
有没有办法让ASIO与0MQ zmq_poll()协同工作?
或者有没有其他推荐的方法来实现这样的设置?
注意:我可以通过使用多个线程来解决这个问题--但它只是一个很小的单核/ CPU机器,它将以非常低的SCGI通信量运行该程序,所以多线程将是对资源的浪费……
发布于 2019-04-04 22:46:33
这个问题提出2年后,有人发布了一个项目,就是这样做的。这个项目在这里:https://github.com/zeromq/azmq。讨论该设计的博客帖子在这里:https://rodgert.github.io/2014/12/24/boost-asio-and-zeromq-pt1/。
下面是从自述文件中复制的示例代码:
#include <azmq/socket.hpp>
#include <boost/asio.hpp>
#include <array>
namespace asio = boost::asio;
int main(int argc, char** argv) {
asio::io_service ios;
azmq::sub_socket subscriber(ios);
subscriber.connect("tcp://192.168.55.112:5556");
subscriber.connect("tcp://192.168.55.201:7721");
subscriber.set_option(azmq::socket::subscribe("NASDAQ"));
azmq::pub_socket publisher(ios);
publisher.bind("ipc://nasdaq-feed");
std::array<char, 256> buf;
for (;;) {
auto size = subscriber.receive(asio::buffer(buf));
publisher.send(asio::buffer(buf));
}
return 0;
}看起来不错。如果您尝试,请在评论中让我知道它在2019年I will probably try in a couple of months and then update this answer中是否仍然有效
https://stackoverflow.com/questions/12829005
复制相似问题