O RMNP pretende combinar todas as vantagens do TCP e a velocidade do UDP para ser rápido o suficiente para suportar jogos modernos em tempo real, como jogos de tiro em primeira pessoa. É basicamente uma extensão do UDP.
A desvantagem do TCP é que, quando um pacote é descartado, ele para de enviar todos os outros pacotes até que o que está faltando seja entregue. Isso pode ser um grande problema para jogos sensíveis ao tempo, porque não é incomum que os dispositivos enfrentem perda de pacotes. Portanto, o RMNP facilita o UDP para garantir uma entrega rápida sem quaisquer restrições. Como o UDP não tem estado, o RMNP implementa uma maneira fácil de lidar com a conexão e distinguir entre clientes "conectados". Cada pacote contém um pequeno cabeçalho contendo principalmente um hash CRC32 para garantir que todos os pacotes recebidos foram transmitidos corretamente.
Para garantir a confiabilidade, o receptor envia pacotes de confirmação de volta para informar ao remetente quais pacotes recebeu. O remetente reenvia cada pacote até receber uma confirmação ou o tempo limite máximo ser atingido. Por causa disso, o RMNP não é 100% confiável, mas pode-se presumir que um pacote será entregue, a menos que um cliente tenha uma perda de pacote de cerca de 100% por alguns segundos.
go get github.com/obsilp/rmnp
Exemplo de servidor Pong
package main
import "github.com/obsilp/rmnp"
func main () {
server := rmnp . NewServer ( ":10001" )
server . Start () // non-blocking
// other code ...
}
Exemplo de cliente Ping
package main
import "github.com/obsilp/rmnp"
func main () {
client := rmnp . NewClient ( "127.0.0.1:10001" )
client . Connect () // non-blocking
// other code ...
}
Eventos e pacotes recebidos podem ser recebidos configurando retornos de chamada. Consulte as respectivas classes para obter mais informações.
Retornos de chamada de clientes | Retornos de chamada do servidor
Este projeto está licenciado sob a licença MIT - consulte o arquivo LICENSE para obter detalhes