我正在尝试设计和实施一个能够“解决”经典生产者 - 消费者问题的程序。我也将使用发布/订阅模式,并且只有一个生产者。
我想到的第一件事就是将每个事物都作为一个单独的线程实现,但后来我意识到这是低效的,并且可能有更聪明的方法来实现它。
我需要:
- 接受来自客户的tcp / ip连接
- 使用来自另一个进程的命名管道获取数据(命名管道可以更改为此处的任何其他内容)
- 一旦我得到数据决定哪些客户端应该得到它并将其发送到那里
- 能够随时解析客户端命令(例如,客户希望更改订阅详细信息)
- 还取决于实现细节我可能想要清除保存传入数据的集合(如果只需要一个)并启动非活动客户端
我现在的想法是:
- 创建一个线程,该线程将接受来自客户端的连接并将每个客户端添加到列表中
- 创建一个线程/线程池,用于执行一个(
boost::strand
)线程,该线程将包括从源读取数据,决定哪个客户端应该获取数据并异步地将数据写入客户端。
我不知道是否
- 这是有效的方法
- 这是有效的方法
- 如何从客户端添加阅读命令?
- 如何检查客户端不活动
如果有关如何正确实施此类内容的任何意见和建议,我将不胜感激。