gpt4 book ai didi

c++ - asio 的多套接字架构

转载 作者:行者123 更新时间:2023-11-30 04:22:32 25 4
gpt4 key购买 nike

我有一个客户端-服务器架构,有 10 个服务器,与一个客户端永久连接,该软件是用 C++ 编写的,并使用 boost asio 库。所有的连接都是在初始化阶段创建的,在执行过程中它们总是打开的。当客户端需要一些信息时,向所有服务器发送请求。每个服务器找到所需的信息并回答客户端。

在客户端中,有一个线程负责从所有套接字接收消息,特别是,我只使用一个io_services,每个套接字都有一个async_read。

当消息到达其中一个套接字时,async_read 读取作为消息 header 的前 N ​​位,然后调用使用 read 的函数(同步)读取消息的其余部分。对于服务器端, header 和消息的其余部分通过单个write(同步)发送。

然后,架构正常工作,但我注意到有时同步读取比平常花费更多时间(~0.24 秒)。理论上,数据已准备好读取,因为当 async_read 已经读取 header 时,同步 read 被调用。我还看到,如果我只使用一台服务器而不是 10 台,则不会出现此问题。此外,我注意到这个问题不是由消息的维度引起的。

是否有可能是因为 io_service 无法处理所有 10 个 async_read?特别是,如果所有套接字同时收到一条消息,io_service 是否会浪费一些时间来管理队列并减慢我的同步读取

我没有发布代码,因为很难将它从项目中分离出来,但如果你不理解我的描述,我可以写一个例子。

谢谢。

最佳答案

1) 当 async.read 完成处理程序被调用时,这并不意味着某些数据可用,这意味着当时所有可用的数据已被读取(除非您指定限制性完成条件)。因此后续的 sync.read 可能会等到更多数据到达。

2) 阻塞一个完成处理程序是个坏主意,因为你实际上阻塞了所有其他完成处理程序和其他发布到该 io_service 的仿函数。考虑更改您的设计。

关于c++ - asio 的多套接字架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com