C+中的网络库+; 我将在Windows上运行的C++客户端/服务器应用程序中工作,服务器本身由“管理器”可执行文件生成,一次生成,一个“Works'可执行文件根据配置配置1到29次。

C+中的网络库+; 我将在Windows上运行的C++客户端/服务器应用程序中工作,服务器本身由“管理器”可执行文件生成,一次生成,一个“Works'可执行文件根据配置配置1到29次。,c++,network-programming,boost-asio,zeromq,C++,Network Programming,Boost Asio,Zeromq,COM位于客户端和“经理”进程之间、“经理”进程和“工作”进程之间(配置它们,将数据发送给进程),以及一些“工作”进程之间。 另一方面:当我说worker process时,我并不是指并行执行完全相同的任务以获得超级性能的进程:它们的配置都不同,执行不同的任务,性能实际上不是问题。这里几个过程的分离更多的是关于稳定性 现在我不知道该选择哪个网络库来完成所有这些 我知道boost::asio,我熟悉boost及其独特的风格,但恐怕我团队的其他成员不熟悉。 我也被建议使用zeroMq。 我也看到了一

COM位于客户端和“经理”进程之间、“经理”进程和“工作”进程之间(配置它们,将数据发送给进程),以及一些“工作”进程之间。 另一方面:当我说worker process时,我并不是指并行执行完全相同的任务以获得超级性能的进程:它们的配置都不同,执行不同的任务,性能实际上不是问题。这里几个过程的分离更多的是关于稳定性

现在我不知道该选择哪个网络库来完成所有这些

我知道boost::asio,我熟悉boost及其独特的风格,但恐怕我团队的其他成员不熟悉。 我也被建议使用zeroMq。 我也看到了一些其他人的优点和缺点。但是我有点迷路了

有了zeroMq,我想我们失去了asio的主角?所以从某种意义上说,它觉得它是较低的水平? 另一方面,它提供了发布/订阅等功能,我认为这些功能对我们没有用处

这些库都不能帮助我们完成序列化部分(交换的数据是异构的)。我在想google协议缓冲区可以在这一点上帮助我们,除非有一个全能库

我们模糊地考虑过的其他选择是Corba、amqp。前者让人觉得笨拙,有人建议我们不要这样做。后者感觉过于复杂。(?)


有什么建议吗?

对于ZMQ,您可能希望使用发布/订阅模型(与ZMQ 2.2相比,ZMQ 3.x尤其有效,因为3.x执行基于发布的订阅过滤,而2.2执行基于客户端的过滤)

所有工人都将使用子套接字连接到管理器(不管他们是什么类型的工人),并订阅管理器需要处理的消息。管理器将绑定一个Pub套接字并推出它从客户端接收的所有消息。工作者将只接收其订阅的消息。这是非常有效的,老实说,我将以这种方式实施这种行为

如果有多个工作进程处理相同的消息(为了提高性能),则需要创建一个订阅该特定消息类型的中间“工作进程”,并绑定一个推送套接字,其中相同类型的工作进程将使用拉式套接字连接到该中间“工作进程”(也称为路由器)。这样一来,传入的消息将“排队”,并在每个工作人员完成一项任务时展开

我可能会从一开始就创建这个中间步骤,这样您就可以在没有太多问题的情况下(如果真的需要的话)进行开箱即用的扩展。

ZeroMQ与Boost.Asio集成,如果您选择这样做的话。也就是说,我建议您使用Boost.Asio实现您的客户机和服务器,如果您熟悉的话。这是一个写得非常好的库,有很好的文档记录,如果您有问题,它有一个活跃的用户社区(即我们)


根据我的经验,大多数倾向于回避Asio的开发人员都不熟悉非阻塞I/O,他们更喜欢使用每连接一个线程的方法来孤立他们的设计,这种方法不能扩展到琐碎的示例之外。将您的同事指向,将他们发送到StackOverflow,以便他们可以阅读标签中的问题。如果他们仍然不相信,也许会向他们展示基于Asio的提案,也许有一天它会成为一个标准。

虽然我没有任何积极的建议(我一直使用自己的网络库),但我可以告诉你应该避免什么:绝对要避免CORBA,也要避免ACE,这太糟糕了。:)你考虑过gsoap吗?它是广泛用于基于soap的architecture@James谢谢你的意见,我忘了提ACE了。我过去确实使用过一点,但在这里并没有真正考虑。@Pradheep我会研究一下,谢谢:)你团队中的其他成员熟悉什么?如果他们都要学习一些新的东西,那么至少你个人已经熟悉asio了。否则团队的所有成员都会有新的发展。说得好!Asio提供了一个干净的、有文档的C++工具包,可以与各种中间件集成。即使我只是将其作为底层中间件的抽象,我也很难放弃。