【问题标题】:Multithreaded server with boost.Asio [closed]带有 boost.Asio 的多线程服务器 [关闭]
【发布时间】:2012-12-14 02:44:44
【问题描述】:

我正在尝试创建一个接收许多连接并处理它的服务器。 我认为如果我将每个连接放在一个线程中会更好,但我不知道该怎么做,因为我仍然不知道如何告诉我的班级“我收到一个新连接,将它放入一个线程”。我很困惑,仍然没有在此处的其他帖子中找到它。请帮帮我。

obs.: 我有一个提示,它创建了一堆连接,所以等待客户端,但我不想这样做,我只想在有人试图进入我的服务器时创建一个连接.

【问题讨论】:

  • 是否需要使用 boost::asio?
  • 不,但这是我找到的最简单的方法。
  • 你可能想看看 ZeroMQ (zeromq.org)

标签: c++ multithreading sockets boost boost-asio


【解决方案1】:

Boost::Asio 文档的 asynchronous TCP daytime server tutorial 准确描述了如何编写这样的服务器。

此外,还有许多多线程examples

【讨论】:

    【解决方案2】:

    查看 asio 文档中的示例。以下示例执行您想要的操作: http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_server.cpp 这会为每个连接创建一个新线程并使用阻塞调用。

    请注意,您也可以使用异步调用并在一个线程中完成所有操作。例如: http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/example/echo/async_tcp_echo_server.cpp

    【讨论】:

    • 此示例创建的线程不超过 1 个。我想我被误解了......我只是想通过某种方式来收听,直到完成新的连接,所以,我准备等待其他连接等等。但我一直在学习,我注意到人们不会用 boost 来做这件事……没关系?
    • 不,阻塞示例确实为每个连接创建 1 个线程。在accept 之后创建一个新线程。新线程的入口点是session 函数。当线程对象t 超出范围时,它会分离,但直到session 函数返回之前的线程。套接字的生命周期由 shared_ptr 管理
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多