RMNP bertujuan untuk menggabungkan semua keunggulan TCP dan kecepatan UDP agar cukup cepat untuk mendukung game realtime modern seperti first person shooters. Ini pada dasarnya merupakan ekstensi untuk UDP.
Hal buruk tentang TCP adalah ketika sebuah paket dijatuhkan, ia berhenti mengirimkan semua paket lainnya sampai paket yang hilang terkirim. Ini bisa menjadi masalah besar bagi game yang sensitif terhadap waktu karena tidak jarang perangkat mengalami kehilangan paket. Oleh karena itu RMNP memfasilitasi UDP untuk menjamin pengiriman cepat tanpa batasan apa pun. Karena UDP adalah stateless, RMNP mengimplementasikan cara mudah untuk menangani koneksi dan membedakan antara klien yang "terhubung". Setiap paket berisi header kecil yang sebagian besar berisi hash CRC32 untuk memastikan bahwa semua paket yang diterima dikirimkan dengan benar.
Untuk menjamin keandalan, penerima mengirimkan kembali paket pengakuan untuk memberi tahu pengirim paket mana yang diterimanya. Pengirim mengirim ulang setiap paket hingga menerima pengakuan atau batas waktu maksimum tercapai. Karena itu RMNP tidak 100% dapat diandalkan tetapi dapat diasumsikan bahwa sebuah paket akan terkirim kecuali klien mengalami kehilangan paket sekitar 100% selama beberapa detik.
go get github.com/obsilp/rmnp
Contoh Server Pong
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
Contoh Klien Ping
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
Acara dan paket yang diterima dapat diterima dengan mengatur panggilan balik. Lihatlah kelas masing-masing untuk informasi lebih lanjut.
Panggilan balik klien | Panggilan balik server
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LISENSI untuk detailnya