Proud::RmiContext 클래스 참조

Public 멤버 함수

PROUD_API RmiContext (MessagePriority priority, MessageReliability reliability, int unreliableS2CRoutedMulticastMaxCount, EncryptMode encryptMode=EM_None)
 
PROUD_API void AssureValidation () const
 

Public 속성

bool m_relayed
 
HostID m_sentFrom
 
int m_unreliableS2CRoutedMulticastMaxCount
 
int m_unreliableS2CRoutedMulticastMaxPingMs
 
int m_maxDirectP2PMulticastCount
 
int64_t m_uniqueID
 
MessagePriority m_priority
 
MessageReliability m_reliability
 
bool m_enableLoopback
 
void * m_hostTag
 
bool m_enableP2PJitTrigger
 
bool m_allowRelaySend
 
double m_forceRelayThresholdRatio
 
bool m_INTERNAL_USE_isProudNetSpecificRmi
 
bool m_fragmentOnNeed
 
EncryptMode m_encryptMode
 
CompressMode m_compressMode
 

정적 Public 속성

static PROUD_API RmiContext ReliableSend
 
static PROUD_API RmiContext FastEncryptedReliableSend
 
static PROUD_API RmiContext SecureReliableSend
 
static PROUD_API RmiContext UnreliableSend
 
static PROUD_API RmiContext FastEncryptedUnreliableSend
 
static PROUD_API RmiContext SecureUnreliableSend
 
static PROUD_API RmiContext UnreliableS2CRoutedMulticast
 

상세한 설명

RMI 호출에 관련된 네트워킹 속성 등

멤버 데이타 문서화

PROUD_API RmiContext Proud::RmiContext::FastEncryptedReliableSend
static

EM_Fast 모드로 암호화 하여 Reliable message 로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 기타 사항은 ReliableSend 와 같습니다.
PROUD_API RmiContext Proud::RmiContext::FastEncryptedUnreliableSend
static

EM_Fast 모드로 암호화 하여 Unreliable message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 기타 사항은 UnreliableSend 와 같습니다.
bool Proud::RmiContext::m_allowRelaySend

이 값이 false이면 Unreliable로 보내려 할때, 상대가 relay mode이면, 보내지 않습니다.

  • 기본값은 true입니다.
CompressMode Proud::RmiContext::m_compressMode

메시지 압축 기능 입니다. 이 값을 CM_None 이외를 선택할 경우 압축을 하여 메시지를 전송합니다.

  • 기본값은 CM_None 입니다.
  • 보낼 메시지의 크기가 너무 작거나(약 50바이트) 압축을 해도 크기가 작아지지 않으면 압축하지 않고 전송합니다.
bool Proud::RmiContext::m_enableLoopback

이 값이 false이면 RMI 수신자가 P2P 그룹 등 복수개인 경우 자기 자신에게 보내는 메시징(loopback)을 제외시킵니다. 기본값은 true입니다.

EncryptMode Proud::RmiContext::m_encryptMode

통신 메시지 암호화하기 에서 사용되는 암호화 알고리즘 선택입니다.

  • 기본값은 EM_None 입니다.
double Proud::RmiContext::m_forceRelayThresholdRatio

강제 릴레이 임계비율 값입니다. 이 값을 조절하면, P2P간 통신 속도보다 릴레이가 더 통신 속도가 빠른 경우 릴레이를 선택할 수 있습니다.

  • 예를 들어 피어간 패킷 전송 시간이 서버를 통해 릴레이하는 시간보다 3배 느린 경우에는 직접 피어에게 전송할 수 있다 하더라도 서버를 통해 릴레이하고 싶을 수 있습니다. 그러한 경우 이 값을 1/3으로 지정하면 됩니다. 5배 느린 경우에 한해 강제 릴레이를 원할 경우 1/5를 지정하면 됩니다. 0을 지정하면 강제 릴레이를 하지 않습니다. 즉, "Relay p2p ping / Direct p2p ping"이 이 값보다 작은 경우에는 강제로 릴레이로 전송합니다.
  • 중국에서는 P2P간 통신 속도보다 서버와 통신하는 속도가 훨씬 원활한 환경이 있다고 알려져 있습니다.
  • 기본값은 0입니다.
bool Proud::RmiContext::m_fragmentOnNeed

true이면, unreliable 송신에 쓰이는 메시지를 MTU 크기로 분할해서 보냅니다. UDP 처리로 인해 서버가 CPU 사용량이 높으면 이것을 꺼 보세요. 기본값은 true 입니다.

void* Proud::RmiContext::m_hostTag

사용자가 지정한 tag 값입니다. 각 호스트에 대한 사용자 정의 데이터(Tag) 기능입니다.

  • 주의! : tag는 네트웍 동기화가 되지 않는 값입니다.
bool Proud::RmiContext::m_INTERNAL_USE_isProudNetSpecificRmi

ProudNet 전용 메시지인지에 대한 식별값입니다.

  • 기본 false입니다. false이면 udp 메시지 갯수를 측정합니다.
  • 특별한 상황이 아니면 이값을 true로 바꾸지 마십시오.
int Proud::RmiContext::m_maxDirectP2PMulticastCount

직접 멀티캐스트를 할 수 있는 최대 갯수

  • 송신량 자동 조절 기능 (Throttling) 기법 중 하나이다.
  • P2P 그룹을 대상으로 RMI 송신을 할 경우, 이 값이 N으로 지정된 경우, P2P 그룹 멤버중 N개 만큼의 타 peer에게는 P2P로 직접 전송한다. (물론 타 peer가 직접 P2P 통신을 하고 있는 경우에) 하지만 나머지 peer들에게는 Relayed P2P로 전송한다. 설령 직접 P2P 통신을 하고 있더라도 말이다. 0을 지정하면 direct P2P 송신 자체를 안함을 의미한다.
  • 이 기능은 클라이언트가 대량의 멀티캐스트를 하는 경우, 그리고 클라이언트의 업로드 속도의 한계가 큰 경우(예를 들어 업로드 속도가 느린 ADSL 회선) 유용하다. 왜냐하면 ProudNet에서는 relayed P2P의 브로드캐스트 과정에서 클라이언트는 1개의 relay될 메시지만을 서버에게 보내고, 서버는 그것을 여러 클라이언트들에게 보내주는 역할을 하기 때문이다.
  • 기본값: 무제한.
  • 클라이언트에서 호출하는 RMI의 파라메터에 전에 이 값을 사용자가 지정할 수 있다. 서버에서는 이 값이 쓰이지 않는다.
MessagePriority Proud::RmiContext::m_priority
mutable

메시지 송신 우선순위

bool Proud::RmiContext::m_relayed

relay된 메시지인가?

MessageReliability Proud::RmiContext::m_reliability

메시지 송신 메서드

  • 사용자가 지정해야 한다.
HostID Proud::RmiContext::m_sentFrom

RMI를 송신한 peer의 HostID 이다.

  • RMI stub에서 채워지는 값이다.
int64_t Proud::RmiContext::m_uniqueID

최종 메시지만 송출하기 기능을 위한 고유값입니다.

  • 기본값은 0입니다. 0인 경우 단일화되지 않습니다.
  • 송신할 메시지를 송신 큐에서 단일화하고자 한다면 이 값을 0 이외의 값을 지정하십시오.
int Proud::RmiContext::m_unreliableS2CRoutedMulticastMaxCount

unreliable send인 경우, routed multicast를 할 수 있다. 이때 몇개까지 허용하는지를 여기서 지정한다.

  • 사용자가 지정해야 한다.
int Proud::RmiContext::m_unreliableS2CRoutedMulticastMaxPingMs

unreliable 메시징인 경우에, routed multicast를 할 수 있다. 이때 얼마 이상의 랙 이하의 피어간 통신에서만 허용하는지를 여기서 지정한다.

  • 사용자가 지정해야 한다.
PROUD_API RmiContext Proud::RmiContext::ReliableSend
static

Reliable message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 유저가 원하면 별도로 RmiContext 객체를 둬도 좋지만 통상적인 경우 RMI 호출시 이것을 그냥 써도 된다.
PROUD_API RmiContext Proud::RmiContext::SecureReliableSend
static

EM_Secure 모드로 암호화 하여 Reliable message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 기타 사항은 ReliableSend 와 같습니다.
PROUD_API RmiContext Proud::RmiContext::SecureUnreliableSend
static

EM_Secure 모드로 암호화 하여 Unreliable message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 기타 사항은 UnreliableSend와 같습니다.
PROUD_API RmiContext Proud::RmiContext::UnreliableS2CRoutedMulticast
static

Unreliable server to client multicast message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 유저가 원하면 별도로 RmiContext 객체를 둬도 좋지만 통상적인 경우 RMI 호출시 이것을 그냥 써도 된다.
  • Medium priority로 지정되어 있다.
  • 이 기능은, 서버에서 여러개의 클라이언트로 unreliable RMI 브로드캐스트 호출을 할 때 수신자 중 P2P 직접 연결이 되어 있는 것들끼리는 P2P를 통한 routed send를 하게 한다. 이 기능은 서버에서의 CPU 사용량을 약간 증가시키는 댓가로 서버에서 클라이언트로의 송신 통신량을 절감한다. (대부분의 게임에서 유용하게 쓰일 수 있다.)
PROUD_API RmiContext Proud::RmiContext::UnreliableSend
static

Unreliable message로 RMI 호출시 이것을 파라메터로 넣으면 된다.

  • 유저가 원하면 별도로 RmiContext 객체를 둬도 좋지만 통상적인 경우 RMI 호출시 이것을 그냥 써도 된다.
  • HIGH priority로 지정되어 있다.

참고 사항

  • 일반적인 온라인 게임에서 전체 통신량의 대부분은 캐릭터 이동, 연사 공격과 같은 몇 종류의 메시지만이 차지하며 그 외의 수많은 메시지들은 낮은 비중을 차지한다. 그리고 충분히 검토하지 않고 unreliable send를 쓸 경우 종종 장시간의 문제 해결 시간으로 이어지곤 한다. 이러한 경험을 고려했을때 온라인 게임 개발 초기 과정에서는 웬만한 메시지는 모두 reliable send를 쓰게 만들다가 네트웍 통신량 프로필링 등을 통해 대부분의 통신량을 차지하지만 누실이 감당되는 메시지들만 찾아서 unreliable send로 바꿔주는 것도 좋은 개발 방법이라 말할 수 있다.