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 許可證獲得許可 - 有關詳細信息,請參閱許可證文件