跟踪Boost ASIO会话的正确方法是什么?

时间:2017-05-30 18:53:33

标签: c++ c++11 session boost boost-asio

我有一个基于implementation shown here的服务器应用程序。此实现将新会话创建为shared_ptr。只要客户端已连接,会话就会保持活动状态。当客户端断开连接时,会话对象被销毁。这很方便,但是......

问题:我希望能够跟踪会话,原因有两个:

  1. 跟踪已连接的用户,并对来自同一用户的会话进行分组
  2. 能够在需要时关闭所有会话并正常退出。
  3. 我该怎么做?

    理想情况下,我希望能够遍历所有活着的会话。

    来自我身边的失败/可怕的解决方案

    • shared_ptr
    • 之前,将每个会话的new_session->start()添加到某个容器

    这个问题是会话永远不会被破坏,即使用户断开连接也不会...当然,这是因为shared_ptr的一个实例仍然存在于容器中,这意味着我有定期检查shared_ptr计数== 1的数量,这将使设计复杂化并产生可怕的线程安全复杂性。

    • 除了互斥锁之外,创建一个包含服务器实例中所有会话的正常指针的容器,并将它们传递给每个会话,并使会话的析构函数从容器中删除

    这个解决方案可以工作(我在这里猜测),但它感觉很难看很复杂,在继续这个混乱之前我想要一些建议。我确信那里有一个比我聪明的人能够找到一个更聪明的解决方案,或者让我意识到boost ASIO已经为此提供了解决方案。

0 个答案:

没有答案