19 个版本

0.3.5 2023 年 8 月 11 日
0.3.4 2023 年 8 月 1 日
0.3.3 2023 年 5 月 30 日
0.2.6 2023 年 5 月 2 日
0.1.5 2023 年 4 月 6 日

#604游戏开发

每月 44 次下载
6 个包中使用(通过 ambient_network

MIT/Apache

93KB
2K SLoC

环境代理

为环境游戏引擎提供 NAT 代理。

协议

环境服务器和代理之间的通信使用通过 quinn 库的 QUIC。消息定义在 protocol.rs

代理服务器请求资产并通知打开的连接、流和接收到的数据报。环境服务器可以打开到玩家的流,向他们发送数据报,并在代理上存储资产,通过代理的 HTTP 界面使它们可用。

分配后,代理开始在另一个端口上监听客户端连接。环境服务器会通知每个连接。在该连接上打开的每个流都会在环境服务器上打开一个等效的流,该流以 ServerStreamHeader 为前缀以进行识别,然后简单地复制。类似地,所有从玩家/客户端接收到的数据报都以 DatagramInfo 为前缀并传输到环境服务器。

代理和客户端(在分配的端点上)之间的通信使用与直接连接到环境服务器(ambient runambient serve)和客户端(ambient join)相同的协议。

资产

每个分配都分配一个 ID(UUID v4)。这决定了资产检索的基本 URL,该 URL 在 ServerMessage::Allocation 中传递给环境服务器,然后传递给连接到代理的客户端。

当代理收到对尚未缓存的资产的 GET 请求时,它将使用内部协议从环境服务器请求该资产。环境服务器也可以在代理上预先缓存资产。

开发

服务器代码位于 server 功能标志之后,以便轻松地将此软件包用作客户端库。

测试代理服务器

代理服务器支持通过环境变量覆盖默认配置。对于测试,建议使用自签名证书(包含在存储库中,配置默认使用它们)。

RUST_LOG=ambient_proxy=trace,info cargo run --features server

运行服务器可以通过Ambient设置CA证书覆盖并提供带有代理服务器地址的 --proxy 参数来使用。例如

AMBIENT_PROXY_TEST_CA_CERT=../AmbientProxy/self-signed-certs/ca.der ambient run --proxy localhost:7000 guest/rust/examples/games/minigolf

客户端应该能够加入代理分配的端点,但他们必须覆盖CA证书,例如

ambient join --ca ../AmbientProxy/self-signed-certs/ca.der localhost:9529

依赖项

~17–33MB
~620K SLoC