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 ライセンスに基づいてライセンスされています - 詳細については LICENSE ファイルを参照してください