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)
93KB
2K SLoC
环境代理
为环境游戏引擎提供 NAT 代理。
协议
环境服务器和代理之间的通信使用通过 quinn
库的 QUIC。消息定义在 protocol.rs。
代理服务器请求资产并通知打开的连接、流和接收到的数据报。环境服务器可以打开到玩家的流,向他们发送数据报,并在代理上存储资产,通过代理的 HTTP 界面使它们可用。
分配后,代理开始在另一个端口上监听客户端连接。环境服务器会通知每个连接。在该连接上打开的每个流都会在环境服务器上打开一个等效的流,该流以 ServerStreamHeader
为前缀以进行识别,然后简单地复制。类似地,所有从玩家/客户端接收到的数据报都以 DatagramInfo
为前缀并传输到环境服务器。
代理和客户端(在分配的端点上)之间的通信使用与直接连接到环境服务器(ambient run
或 ambient 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