轮询命令以在 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_queue
和write_in_progress
)。
基本上,你注入一个事件(即"消息排队"),让异步调用链耗尽队列。与对每条消息的操作进行排队相比,异步调用链的好处是会隐式排序/同步¹
¹ 隐式链 - 为什么在使用 boost::asio 时每个连接都需要链?
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- Android NDK传感器向事件队列报告奇怪的间隔
- 在cuda线程之间共享大量常量数据
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 按对象的特定方法按升序排列的C++优先级队列
- 共享队列的线程安全
- 轮询命令以在 boost asio 中的共享队列中发送
- 如何读取STD ::队列与另一个线程共享
- 关于在这种情况下消息队列与共享内存的适用性或适用性
- 写入共享内存队列时出现隔离错误
- 使用 pthread 并发推送()到共享队列
- 提升c++无锁队列与共享队列的对比
- 在线程通信中,消息队列相对于共享数据有什么优势?
- 由两个线程访问的共享队列的临界区代码是什么?
- 生产者/消费者设计-在Qt中跨线程共享队列变量