对C/C++远程消息队列的建议
发布时间:2020-12-16 06:03:42 所属栏目:百科 来源:网络整理
导读:我正在开展一个涉及几个C程序的项目,每个C程序都需要输入和生成输出.数据(几十到几百个字节,大概是 JSON)基本上在一个方向上流动(异步),程序将需要位于LAN周围的不同 Linux计算机上. 由于数据只能在一个方向流动,所以我不相信我需要像HTTP这样的事务模型.我
我正在开展一个涉及几个C程序的项目,每个C程序都需要输入和生成输出.数据(几十到几百个字节,大概是
JSON)基本上在一个方向上流动(异步),程序将需要位于LAN周围的不同
Linux计算机上.
由于数据只能在一个方向流动,所以我不相信我需要像HTTP这样的事务模型.我认为一个消息队列模式(消防和忘记)是最有意义的,应该简化每个程序的逻辑.仅仅注意到消息已成功添加到远程队列可能就足够了. 我正在寻找的是如何在C或C中实现此消息队列的建议.似乎POSIX和Boost消息队列仅限于单个主机,RabbitMQ似乎对C/C++支持较弱,MQ4CPP似乎对业务关键角色的支持不足.我错了吗? Boost ASIO或ACE还是自己编写套接字代码?我期待您的建议. 解决方法
在简单的消息支持方面,ZeroMQ is hard to beat.它可用于许多语言绑定,并支持从简单的发送和接收到pub / sub,fanout甚至消息管道的一切.代码也很容易消化,并且可以很容易地在模式之间切换.
看看他们的Weather Update Server sample(在20几种奇怪的语言)显示创建发布/订阅设置是多么容易: zmq::context_t context (1); zmq::socket_t publisher (context,ZMQ_PUB); publisher.bind("tcp://*:5556"); publisher.bind("ipc://weather.ipc"); while(1) { // Send message to all subscribers zmq::message_t message(20); snprintf ((char *) message.data(),20,"%05d %d %d",zipcode,temperature,relhumidity); publisher.send(message); } 我使用它在一些混合的C#和Python进程没有太多麻烦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |