繁体   English   中英

轮询命令以在Boost Asio中发送共享队列

[英]Poll command to send in shared queue in boost asio

我正在使用Boost asio制作服务器,但遇到了问题。 我的服务器应该能够从多个连接的客户端接收数据,也可以向特定客户端发送命令。

为此,我为每个连接的客户端实例化一个新的连接会话,在该客户端中,我通过调用async_write的回调与调用async_read等的回调来调用async_read。

我面临的问题如下:

有一个服务器的GUI,我可以在其中单击要发送的命令,然后将这些命令放在共享队列中。 共享队列后,每个连接会话都可以轮询以查看是否有命令要发送到其连接的客户端。

问题是,使用会话中的“调用自身的回调”方案,如何在不影响性能的情况下检查队列中是否有针对我的命令(我的第一个解决方案是在async_write操作上放置一个截止时间计时器,我可以每X秒检查一次)?

任何想法 ?

关键是基于行动者的事件处理从根本上与轮询队列相反。

通常,您将排队并安排一个写循环(使用async_回调样式),直到耗尽为止。 例如: http//www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/example/cpp03/chat/chat_client.cpp (查找chat_message_queuewrite_in_progress )。

基本上,您注入一个事件(即“已排队的消息”),并让异步调用链耗尽队列。 相对于对每个消息进行操作排队的好处是,异步调用链可以进行隐式排序/同步¹

¹隐式链- 为什么在使用boost :: asio时每个连接都需要链?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM