【问题标题】:Boost Asio TCP Server Handling multiple clientsBoost Asio TCP Server 处理多个客户端
【发布时间】:2018-10-24 08:45:20
【问题描述】:

我不熟悉网络编程和 Boost Asio 库的使用。

通过修改 Boost Asio“阻塞 TCP Echo 服务器和客户端”,我成功地实现了我的要求的任务,它在我的客户端和服务器之间执行操作事务。

现在,我需要将多个客户端连接到我的服务器。

我发现了一些相关链接,建议在服务器端使用async_accept

所以,我尝试运行 Boost Asio 示例:“Async TCP Echo Server”和“Blocking TCP Echo client”,服务器区分不同的客户端并相应地处理它们。

但是,我的实际要求应该是,不是服务器为一个客户端完成整个过程,而是[服务器]必须为第一个客户端执行相同的操作,然后转到第二个客户端并执行这些操作,然后再次回到第一个客户端并按此顺序继续,直到所有操作完成。

是否有任何方法或想法可以帮助我使用 Boost Asio 执行此流程?另外我只是使用“阻塞 TCP Echo 客户端”,它只有一个普通的 connect() 而不是 async_connect(),现在这是个问题吗?

另外,是否可以使用 Boost Asio 通过服务器在多个客户端之间进行通信?

提前非常感谢您!

【问题讨论】:

  • 你能提供一些你迄今为止尝试过的代码吗?
  • 是的,我会添加代码
  • 嗨,Bjoern Urban,我已经使用阻塞 TCP Echo 概念实现了客户端和服务器之间的通信。现在我希望服务器处理多个客户端,其中一个客户端一次不会完成整个操作,而是使用服务器完成其中的一部分,下一个等待的客户端继续其余的操作。我希望这些操作与客户端交错。
  • "它 [服务器] 必须为第一个客户端执行相同的操作,然后转到第二个客户端并执行这些操作,然后再次返回到第一个客户端并按此顺序继续直到所有操作都完成” - 这一点完全不清楚。我们不知道“这个命令”是什么意思、“回来”、“再次”或“操作”是什么。
  • 嗨,就像,服务器将数据发送到第一个客户端并等待第一个客户端确认,然后将数据发送到第二个客户端并等待直到它确认之后服务器会再次请求第一个客户端返回发送的数据,同样要求第二个客户端返回数据。我只是在这里为我的代码使用 Blocking TCP Echo Server and Client。我不确定可以进行哪些确切的修改!这里,Clients 并没有断开与 Server 的连接,在 Server 完成另一个 Client 的请求后再次调用它们。

标签: c++ boost-asio


【解决方案1】:

有两种模型可以在服务器上同时处理多个客户端。

一种是为每个客户端生成一个新线程,然后每个线程同步处理每个客户端。第二种模型是在单个线程上使用异步 API,所有线程都在单个服务上运行。接受完成后,您将创建一个新的工作线程并从协议所需的发送和接收启动工作线程。您的主线程返回接受新连接。

使用异步,您可以通过异步接受和调用 io_service 来启动泵。接受完成后,您的回调将运行。您现在再次启动泵,进一步接受(对于更多客户端)为新创建的客户端启动异步发送和接收。由于所有的发送和接收都是非阻塞的,你的线程唯一的休眠时间是它无事可做的时候。否则 io_service run 方法会为您处理一切。

如果您阻止发送和接收,通过,您不能同时处理多个客户端。

【讨论】:

  • 所以我打算将我的 Blocking TCP Echo Server 代码形式修改为 Spawn Server 格式,包括我的逻辑,我希望在这种情况下可以解决运行多个客户端的问题。但是,我不确定如何在执行部分服务器逻辑时在客户端之间实现前面提到的等待操作?这是我最大的疑惑!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多