提升 ASIO TCP 服务器架构

Boost ASIO TCP server architecture

本文关键字:服务器 TCP ASIO 提升      更新时间:2023-10-16

我是boost和asio(但不是网络编程(的新手,我目前正在尝试创建一个接受多个客户端的TCP服务器。 带有客户端的服务器的主要功能很简单:

1-读取固定大小的标题;

2-解释它是什么样的请求,读取数据包的其余部分;

3-处理所有数据的请求;

4-返回步骤1。

这适用于基本请求,例如:检查凭据、启用 FTP 协议等... 但是有一个问题: 一个请求要求通过服务器与另一个连接的客户端进行通信。 但是,如果我遵循这个 Boost 网站示例中给出的 Boost Asio 架构

或者这次会议中的那个

我实际上无法访问其他客户端套接字,它们没有库存,它们由于智能指针的行为而存在。

我确实有一个解决这个问题的方法,它将连接的套接字保留在列表中,并与每个连接的套接字共享,因此每次客户端都可以访问其他客户端套接字。 但我真的认为这不是一个好的建筑,它可以更好。

有没有已知的方法来解决这个问题?

这是一个很好的方法:

  • 服务器保留所有连接的客户端的套接字列表
  • 每个客户端都会收到一个 ID(字符串或 int(,可以轻松地通过网络发送
  • ID 为"1"的
  • 客户端向服务器发送 ID 为"2"的客户端的消息
  • 服务器从"1"接收消息,并使用存储的套接字发送到"2">

这样,只有服务器保留套接字。所有客户端都使用 ID 来识别彼此。