#web-rtc #data-channel #unreliable #browser #unordered #message #game-server

webrtc-unreliable

通过WebRTC在JavaScript/WebAssembly和原生Rust之间实现类似UDP(不可靠、无序)的通信

13个版本

0.6.0 2024年1月1日
0.5.3 2022年9月17日
0.5.2 2022年3月14日
0.5.1 2021年5月3日
0.2.1 2019年6月2日

#402 in 网络编程

Download history 52/week @ 2024-03-12 49/week @ 2024-03-19 32/week @ 2024-03-26 96/week @ 2024-04-02 50/week @ 2024-04-09 33/week @ 2024-04-16 63/week @ 2024-04-23 28/week @ 2024-04-30 34/week @ 2024-05-07 25/week @ 2024-05-14 25/week @ 2024-05-21 39/week @ 2024-05-28 18/week @ 2024-06-04 20/week @ 2024-06-11 25/week @ 2024-06-18 21/week @ 2024-06-25

每月93次下载
6 个Crate中使用(通过 naia-server-socket

MIT 许可证

105KB
2.5K SLoC

webrtc-unreliable


Build Status Latest Version API Documentation

这是一个Rust库,允许您编写基于浏览器的客户端和UDP-like网络的游戏服务器。

此Crate并不旨在作为通用WebRTC数据通道系统,而是设计用于作为环境中UDP不可用的高级协议的底层UDP-like传输层。它提供了一个异步API,用于接受来自浏览器的WebRTC连接以及从多个客户端发送和接收WebRTC不可靠数据通道消息。

实现WebRTC所需的所有协议都是令人畏惧的。此Crate仅实现了支持不可靠、无序数据通道消息所需的最小WebRTC子集。由于WebRTC支持非常有限,此Crate不需要依赖于现有的重量级WebRTC实现,但因此协议支持极为有限。

您应该预期 WebRTC数据通道功能,并且 在不可靠、无序模式下工作。此外,WebRTC消息长度比完整WebRTC实现支持的长度更为严格。仅处理 未分段 的SCTP数据包,因此任何足够大的消息,足以导致SCTP数据包需要分段,都会在写入时引发错误,并在读取时简单地丢弃。最大消息长度取决于您连接的特定浏览器,但在我的测试中目前略小于1200字节。

此Crate通过依赖于实现Runtime特质的所需功能,对异步运行时不可知。需求最小:一个Sleep future和一个具有轮询接收/发送的UdpSocket。在激活了tokio特性时提供了一个tokio实现。

运行示例

在终端中

$ cargo run --features tokio --example echo-server -- --data 127.0.0.1:42424 --http 127.0.0.1:8080 --public 127.0.0.1:42424

然后,使用Web浏览器,访问 'http://127.0.0.1:8080/index.html'。打开调试控制台,如果一切正常,您应该会看到发送和接收的消息。

请注意,如果您正在使用Firefox浏览器,Firefox不支持到127.0.0.1的WebRTC连接,因此您可能需要使用不同的IP地址。

致谢

这最初是Rust / Tokio对WebUDP项目的移植,因此原始设计的功劳归功于该项目。

许可证

本项目采用MIT许可证

依赖项

~3–13MB
~154K SLoC