RMNP pretende combinar todas las ventajas de TCP y la velocidad de UDP para ser lo suficientemente rápido como para soportar juegos modernos en tiempo real como los shooters en primera persona. Básicamente es una extensión para UDP.
Lo malo de TCP es que una vez que se descarta un paquete, deja de enviar todos los demás paquetes hasta que se entrega el que falta. Esto puede ser un gran problema para los juegos en los que el tiempo es urgente porque no es raro que los dispositivos experimenten pérdida de paquetes. Por lo tanto, RMNP facilita UDP para garantizar una entrega rápida y sin restricciones. Debido a que UDP no tiene estado, RMNP implementa una manera fácil de manejar la conexión y distinguir entre clientes "conectados". Cada paquete contiene un pequeño encabezado que contiene principalmente un hash CRC32 para garantizar que todos los paquetes recibidos se transmitan correctamente.
Para garantizar la confiabilidad, el receptor envía paquetes de acuse de recibo para indicarle al remitente qué paquetes recibió. El remitente reenvía cada paquete hasta que recibe un acuse de recibo o se alcanza el tiempo de espera máximo. Debido a eso, RMNP no es 100% confiable, pero se puede suponer que se entregará un paquete a menos que un cliente tenga una pérdida de paquetes de aproximadamente el 100% durante un par de segundos.
go get github.com/obsilp/rmnp
Ejemplo de servidor Pong
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
Ejemplo de cliente de ping
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
Los eventos y los paquetes recibidos se pueden recibir configurando devoluciones de llamada. Mire las clases respectivas para obtener más información.
Devoluciones de llamada de clientes | Devoluciones de llamada del servidor
Este proyecto tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.