RMNP는 1인칭 슈팅 게임과 같은 최신 실시간 게임을 지원할 수 있을 만큼 빠른 속도를 내기 위해 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 ...
}
핑 클라이언트 예
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 파일을 참조하세요.