RMNP vise à combiner tous les avantages de TCP et la vitesse d'UDP afin d'être suffisamment rapide pour prendre en charge les jeux modernes en temps réel comme les jeux de tir à la première personne. Il s'agit essentiellement d'une extension pour UDP.
Le problème avec TCP est qu'une fois qu'un paquet est abandonné, il cesse d'envoyer tous les autres paquets jusqu'à ce que celui qui manque soit livré. Cela peut constituer un énorme problème pour les jeux sensibles au temps, car il n'est pas rare que les appareils subissent une perte de paquets. Par conséquent, RMNP facilite UDP pour garantir une livraison rapide sans aucune restriction. Parce qu'UDP est sans état, RMNP implémente un moyen simple de gérer la connexion et de distinguer les clients « connectés ». Chaque paquet contient un petit en-tête contenant principalement un hachage CRC32 pour garantir que tous les paquets reçus ont été transmis correctement.
Pour garantir la fiabilité, le récepteur renvoie des paquets d'accusé de réception pour indiquer à l'expéditeur quels paquets il a reçus. L'expéditeur renvoie chaque paquet jusqu'à ce qu'il reçoive un accusé de réception ou que le délai d'attente maximum soit atteint. Pour cette raison, RMNP n'est pas fiable à 100 %, mais on peut supposer qu'un paquet sera livré à moins qu'un client ne subisse une perte de paquet d'environ 100 % pendant quelques secondes.
go get github.com/obsilp/rmnp
Exemple de serveur Pong
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
Exemple de client Ping
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
Les événements et les paquets reçus peuvent être reçus en définissant des rappels. Regardez les classes respectives pour plus d’informations.
Rappels clients | Rappels du serveur
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails