Asio对等网络编程

问题描述 投票:0回答:1

我正在研究有关套接字的Asio文档,但找不到如何处理以下情况的有用信息:

我假设对等网络中有很多服务器(最多1000个)。服务器之间必须定期进行通信,因此我不想每次需要时都打开新的客户端连接以将消息发送到另一台服务器(开销很大)。

同时创建n个分别与客户端相对应的线程->服务器连接也是不可行的。

我将实现不同的通信方案(全部,全部,星型和树型,因此1,log(n)和n个服务器将必须实例化这n个套接字客户端以创建与其他服务器的连接。] >

我可以简单地做一个好方法(伪代码)。

pool = ConnectionPool.create(vector<IP>);
pool.sendMessage(ip, message);

我知道在服务器端我可以使用异步连接。但是,我真的不知道如何从C ++ / Asio的“客户端”(发送者)角度处理它。

Tl:DR;

[当我想每次将消息发送到N个服务器而不必每次都打开N个连接并且都不使用N个线程时,应该使用哪些API和类”。

我正在研究有关套接字的Asio文档,但在处理以下情况时找不到任何有用的方法:我假设对等网络中有很多服务器(上...

c++ boost-asio p2p
1个回答
0
投票

由于您已声明要使用基于TCP的协议(即基于连接的协议,因此可以使用异步ASIO API,并且可以依赖1个线程,因为异步(即反应堆模式调用)不会阻塞。

您的服务器将boost::asio::async_write用作boost::asio::ip::tcp::socket,这等于发生了一个TCP连接。发送完成后,将调用以async_write作为参数的回调,但是async_write将立即返回。接收将类似于客户端。为了获得到传入客户端的TCP连接,您必须使用boost::asio::ip::tcp::resolver,该端口通过boost::asio::ip::tcp::resolver::async_resolve进行侦听为您打开新的TCP连接/套接字。实际上,您将需要2个,一个分别用于IPv4和IPv6。

© www.soinside.com 2019 - 2024. All rights reserved.