Producer - 使用Boost库的C ++中的消费者

时间:2012-11-25 20:39:32

标签: c++ multithreading boost boost-asio

我正在尝试设计和实施一个能够“解决”经典生产者 - 消费者问题的程序。我也将使用发布/订阅模式,并且只有一个生产者。

我想到的第一件事就是将每个事物都作为一个单独的线程实现,但后来我意识到这是低效的,并且可能有更聪明的方法来实现它。

我需要:

  • 接受来自客户的tcp / ip连接
  • 使用来自另一个进程的命名管道获取数据(命名管道可以更改为此处的任何其他内容)
  • 一旦我得到数据决定哪些客户端应该得到它并将其发送到那里
  • 能够随时解析客户端命令(例如,客户希望更改订阅详细信息)
  • 还取决于实现细节我可能想要清除保存传入数据的集合(如果只需要一个)并启动非活动客户端

我现在的想法是:

  • 创建一个线程,该线程将接受来自客户端的连接并将每个客户端添加到列表中
  • 创建一个线程/线程池,用于执行一个(boost::strand)线程,该线程将包括从源读取数据,决定哪个客户端应该获取数据并异步地将数据写入客户端。

我不知道是否

  • 这是有效的方法
  • 这是有效的方法
  • 如何从客户端添加阅读命令?
  • 如何检查客户端不活动

如果有关如何正确实施此类内容的任何意见和建议,我将不胜感激。

0 个答案:

没有答案