目录
1. 架构设计:信令服务器与客户端
2. 选择技术栈
3. 实现信令服务器
4. 客户端实现
5. 测试
6. 下一步计划
日期:2025年4月5日
今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息,以便能够进行点对点通信。我将整个过程分为几个步骤,依次完成。
1. 架构设计:信令服务器与客户端
首先,我需要设计一个信令服务器,它充当了一个中介角色。信令服务器的任务是接收客户端(设备 A 和 B)的注册请求,记录它们的公网地址信息,并在有请求时返回相应的地址给请求者。客户端的任务是向信令服务器注册自己,并请求对方的地址信息。
2. 选择技术栈:
-
服务器部分: 我选择了使用 JSON 来传输客户端的信息,TCP 协议来建立与服务器的连接。服务器使用
asio
库来处理网络通信。 -
客户端部分: 客户端也同样使用
asio
库来处理与信令服务器的连接。每个客户端将使用UUID
作为身份标识,并通过JSON
格式将注册信息发送给信令服务器。 -
数据库部分: 在服务器端,为了存储客户端的公网地址信息,决定使用内存数据结构(如
std::unordered_map
)进行存储,简单高效。
3. 实现信令服务器:
我首先实现了信令服务器的基本框架,包括网络通信部分。信令服务器能够接收来自客户端的请求,并根据请求的类型进行响应。
-
注册过程: 客户端发送一个 JSON 请求,包含自己的
UUID
和公网地址信息,服务器接收到该请求后,将其信息保存到内存中(使用unordered_map
结构,以UUID
为键,公网地址为值)。 -
查询过程: 客户端向服务器发送查询请求,查询对方的公网地址。服务器接收到查询请求后,通过
UUID
查找对应的公网地址,并将其返回给客户端。
4. 客户端实现:
客户端实现的步骤如下:
-
生成 UUID: 每个客户端在启动时都生成一个唯一的
UUID
,作为其唯一标识符。 -
注册到信令服务器: 客户端将自己的
UUID
和公网地址信息(例如,通过asio
获取本地网络信息)打包成一个 JSON 请求,并通过 TCP 连接发送到信令服务器进行注册。 -
请求对方公网地址: 客户端 A 想要与 B 通信时,首先向信令服务器请求 B 的公网地址。信令服务器返回 B 的公网地址后,客户端 A 可以通过 UDP 或其他协议与 B 进行点对点通信。
5. 测试:
-
测试信令服务器注册功能: 我先启动了信令服务器,并通过客户端 A 发送注册请求,成功将 A 的信息注册到服务器中。接着,客户端 B 也进行注册,确保两台设备的公网地址都能被服务器记录。
-
测试查询功能: 客户端 A 向信令服务器请求 B 的公网地址信息,服务器正确返回了 B 的地址,A 可以继续与 B 建立通信。
-
模拟点对点通信: 客户端 A 收到 B 的公网地址后,使用 UDP 协议向 B 发送数据包,B 收到数据包后发送回应,完成了初步的点对点通信测试。
6. 下一步计划:
-
实现 UDP 打洞功能: 目前,A 和 B 已经能够通过信令服务器查询对方地址,下一步我将着重实现 NAT 打洞技术,使两台设备能够在 NAT 网络下建立稳定的 P2P 连接。
-
改进通信机制: 除了 NAT 打洞,还需要实现一种机制,保证两台设备在网络不稳定的情况下也能够保持通信,比如增加心跳包检查,确保双方连接的稳定性。
-
优化信令服务器: 目前信令服务器仅支持基础的注册与查询功能,未来可以考虑增加其他功能,如自动断线重连、消息队列、甚至是通过 WebSocket 支持实时通信等。
日志完毕
开发者:Muyu
日期:2025年4月5日
GitCode - 全球开发者的开源社区,开源代码托管平台