RakNetty는 Oculus RakNet을 Java로 깔끔하고 현대적으로 구현한 것입니다.
RakNet은 유명한 Minecraft: Bedrock Edition 및 Unity Engine을 포함하여 많은 프로젝트에서 사용되는 네트워킹 라이브러리입니다. RakNet은 UDP를 네트워킹 프로토콜로 사용하는데, 이는 기본적으로 연결이 없으며 TCP와 비교하여 패킷이 대상에 도달한다는 보장이 없습니다. RakNet은 패킷이 순서 있고 안정적인 방식으로 전달될 수 있도록 다양한 알고리즘을 구현합니다. RakNetty는 프로토콜과 알고리즘을 java로 포팅합니다.
RakNetty는 고성능 비동기 이벤트 중심 프레임워크인 Netty를 기반으로 구축되었습니다. Blocking IO를 사용하는 원래 C++ 버전과 비교할 때 RakNetty는 여러 스레드에서 처리할 패킷을 디스패치하여 달성되는 전체 성능을 더욱 향상시키는 Non-blocking IO의 장점을 가지고 있습니다. 이에 비해 RakNet의 원래 버전은 단일 스레드의 모든 연결에 대한 패킷도 처리합니다.
현재 RakNetty는 작동하고 대부분의 RakNet 기능을 지원하지만 사소한 테스트만 수행됩니다. 코드는 원래 C++ 버전의 바이트별 복사본이 아닌 Java 스타일 변환을 사용하여 Netty와 유사한 구조로 구성됩니다.
< repositories >
< repository >
< id >nukkit-releases</ id >
< url >https://nukkit.org/nexus/repository/maven-releases/</ url >
</ repository >
</ repositories >
< dependency >
< groupId >org.nukkit</ groupId >
< artifactId >raknetty</ artifactId >
< version >1.0</ version >
</ dependency >
예제 클라이언트 보기
예제 서버 보기
RakNet은 원래 코드에 여러 상수를 정의하므로 개발자가 이를 재정의하여 재정의할 수 있습니다. Minecraft: Bedrock 에디션은 다른 버전의 RakNet을 사용하고 일부 상수를 변경합니다. 일반적인 사용을 위해 RakNetty는 Netty의 채널 옵션을 활용하여 다른 방식으로 상수 재정의를 지원합니다.
옵션 | 설명 | 기본 RakNet | 근본적인 |
---|---|---|---|
RAKNET_GUID | 서버의 가이드 | 무작위의 | 무작위의 |
RAKNET_NUMBER_OF_INTERNAL_IDS | 연결 요청 시 주소 목록의 크기 | 10 | 20 |
RAKNET_PROTOCOL_VERSION | RakNet 프로토콜 버전 | 6 | 10 |
RAKNET_MAX_CONNECTIONS | 최대 연결 수 | 사용자별 | 사용자별 |
RAKNET_MAX_MTU_SIZE | 허용되는 최대 MTU 크기 | 1492 | 1400 |
RAKNET_OFFLINE_RESPONSE | 핑 시 오프라인 응답 | 끈 | 서버 MOTD |
용법:
ServerBootstrap boot ; // your own server bootstrap
boot . option ( RakServerChannelOption . RAKNET_GUID , 123456L )
. option ( RakServerChannelOption . RAKNET_NUMBER_OF_INTERNAL_IDS , 20 )
. option ( RakServerChannelOption . RAKNET_PROTOCOL_VERSION , 10 )
. option ( RakServerChannelOption . RAKNET_MAX_CONNECTIONS , 15 )
. option ( RakServerChannelOption . RAKNET_MAX_MTU_SIZE , 1400 )
. option ( RakServerChannelOption . RAKNET_OFFLINE_RESPONSE , new ExampleBedrockPingResponse ());
옵션 | 설명 | 기본 RakNet | 근본적인 |
---|---|---|---|
RAKNET_GUID | 서버의 가이드 | 무작위의 | 무작위의 |
RAKNET_NUMBER_OF_INTERNAL_IDS | 연결 요청 시 주소 목록의 크기 | 10 | 20 |
RAKNET_PROTOCOL_VERSION | RakNet 프로토콜 버전 | 6 | 10 |
RAKNET_CONNECT_MTU_SIZES | MTU 크기를 감지하기 위한 시험용 크기 | 1492, 1200, 576 | 1492, 1200, 576 |
RAKNET_CONNECT_ATTEMPTS | 연결 요청이 실패하기 전에 시도한 횟수 | 6 | 12 |
RAKNET_CONNECT_INTERVAL | 각 연결 요청 사이의 간격 | 1000 | 500 |
RAKNET_CONNECT_TIMEOUT | 연결 요청 시간 초과 | 0 | 0 |
RAKNET_UNRELIABLE_TIMEOUT | 폐기할 신뢰할 수 없는 패킷의 시간 초과 | 0 | 0 |
RAKNET_TIMEOUT | 연결 시간 초과 | 10000 | 10000 |
용법:
Bootstrap boot ; // your own bootstrap
boot . option ( RakChannelOption . RAKNET_GUID , 654321L )
. option ( RakChannelOption . RAKNET_NUMBER_OF_INTERNAL_IDS , 20 )
. option ( RakChannelOption . RAKNET_PROTOCOL_VERSION , 10 )
. option ( RakChannelOption . RAKNET_CONNECT_INTERVAL , 500 )
. option ( RakChannelOption . RAKNET_CONNECT_ATTEMPTS , 12 );