rmnp
1.0.0
RMNP 旨在结合 TCP 的所有优势和 UDP 的速度,以便足够快地支持现代实时游戏,例如第一人称射击游戏。它基本上是 UDP 的扩展。
TCP 的缺点是,一旦一个数据包被丢弃,它就会停止发送所有其他数据包,直到丢失的数据包被传送为止。对于时间敏感的游戏来说,这可能是一个大问题,因为设备遇到丢包的情况并不少见。因此,RMNP 促进了 UDP 的传输,保证快速传输,没有任何限制。因为 UDP 是无状态的,所以 RMNP 实现了一种简单的方法来处理连接并区分“已连接”客户端。每个数据包都包含一个小标头,主要包含 CRC32 哈希值,以确保所有收到的数据包都能正确传输。
为了保证可靠性,接收方会发回确认数据包,告诉发送方它收到了哪些数据包。发送方重新发送每个数据包,直到收到确认或达到最大超时。由于 RMNP 不是 100% 可靠,但可以假设除非客户端在几秒钟内出现大约 100% 的数据包丢失,否则数据包将被传送。
go get github.com/obsilp/rmnp
Pong 服务器示例
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
Ping 客户端示例
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
可以通过设置回调来接收事件和接收到的数据包。查看相应的类以获取更多信息。
客户端回调 |服务器回调
该项目已根据 MIT 许可证获得许可 - 有关详细信息,请参阅许可证文件