Boost ASIO TCP 服务器架构
Boost ASIO TCP server architecture
我是 boost 和 asio 的新手(但不是网络编程),我目前正在尝试创建一个接受多个客户端的 TCP 服务器。
服务器与客户端的主要功能很简单:
1-读取固定大小的Header;
2- 解释是什么类型的请求,读取数据包的其余部分;
3- 处理包含所有数据的请求;
4- 回到第 1 步。
这正在处理基本请求,例如:检查凭据、启用 FTP 协议等...
但有个问题 :
一个请求要求通过服务器与另一个连接的客户端通信。
但是,如果我遵循给定 in this example of the Boost website
的 Boost Asio 架构
中的那个
我实际上无法访问其他客户端套接字,它们没有存货,由于智能指针的行为,它们还活着。
我确实有解决这个问题的方法,就是将连接的套接字保存在列表中,并与每个连接的套接字共享,这样每次客户端都可以访问其他客户端套接字。
但我真的认为这不是一个好的架构,它可以做得更好。
有什么已知的方法可以解决这个问题吗?
这是一个好方法:
- 服务器为所有连接的客户端保留套接字列表
- 每个客户端都会收到一个可以轻松通过网络发送的 ID(字符串或整数)
- ID 为“1”的客户端向服务器发送 ID 为“2”的客户端的消息
- 服务器从“1”接收消息并使用存储的套接字发送到“2”
这样只有服务器保留套接字。所有客户端都使用 ID 来识别彼此。
我是 boost 和 asio 的新手(但不是网络编程),我目前正在尝试创建一个接受多个客户端的 TCP 服务器。 服务器与客户端的主要功能很简单:
1-读取固定大小的Header;
2- 解释是什么类型的请求,读取数据包的其余部分;
3- 处理包含所有数据的请求;
4- 回到第 1 步。
这正在处理基本请求,例如:检查凭据、启用 FTP 协议等... 但有个问题 : 一个请求要求通过服务器与另一个连接的客户端通信。 但是,如果我遵循给定 in this example of the Boost website
的 Boost Asio 架构 中的那个我实际上无法访问其他客户端套接字,它们没有存货,由于智能指针的行为,它们还活着。
我确实有解决这个问题的方法,就是将连接的套接字保存在列表中,并与每个连接的套接字共享,这样每次客户端都可以访问其他客户端套接字。 但我真的认为这不是一个好的架构,它可以做得更好。
有什么已知的方法可以解决这个问题吗?
这是一个好方法:
- 服务器为所有连接的客户端保留套接字列表
- 每个客户端都会收到一个可以轻松通过网络发送的 ID(字符串或整数)
- ID 为“1”的客户端向服务器发送 ID 为“2”的客户端的消息
- 服务器从“1”接收消息并使用存储的套接字发送到“2”
这样只有服务器保留套接字。所有客户端都使用 ID 来识别彼此。