2014-09-30 2 views
0

현재 네트워크를 통해 다른 데이터를 포함 할 수있는 메시지를 전달하는 문제가 있습니다. 내 게임의 프로토 타입을 만들었지 만 이제는 게임 네트워킹을 구현하는 데 바쁩니다.다른 유형의 일련 화 된 메시지를 네트워크에서 전달하는 방법

모든 네트워크 틱의 모든 정보를 끊임없이 보내는 것은 어리석은 일이며 다른 데이터를 포함하는 다른 메시지를 보내는 것이 좋을 것이라고 생각하므로 다른 유형의 메시지를 보내고 싶습니다. 수신 측에서 수신되는 메시지를 구별하는 가장 좋은 방법은 무엇입니까?

현재 특정 유형의 메시지를 구분하는 문자열 앞에 시스템이 있습니다. 그런 다음 내 메시지는 유형을 결정하는 내 메시지 파서 클래스를 통해 전송되고 올바른 유형으로 비 직렬화됩니다.

내가 알고 싶은 것은 이것이 더 좋은 방법이 있다면 무엇입니까? 상당히 일반적인 문제 여야하고, 그렇게 사소한 해결책을 제시해야합니다. 그렇게하지 않는 한 사소한 해결책이 있어야합니다.

감사합니다.

+0

Google 프로토콜 버퍼를 확인하십시오 –

+0

프로토콜 버퍼를 사용하지 않는다고 가정하면 다른 대안이 있습니까? – Daniel

+1

적어도 문자열 대신 형식 키를 사이트에 하나 또는 두 개의 바이트를 사용하여 오버 헤드를 줄일 수 있다고 생각합니다. –

답변

1

나는 다시 신중하게 질문을 읽고, 지금은, 당신이 Currently I have a system where I prepend a string which distinguishes a certain type of message. My message is then sent through my own message parser class where it determines the type, and deserializes it to the correct type.
확인을 보이는 말을 당신의 문제가 무엇인지 이해하지 않는다, 당신은 수평선 아래에있는 내 대답 메시지의 크기를 줄일 수 있지만 원칙은 동일하게 유지 .

비동기 통신의 경우 올바른 방법이지만 동기화를 수행하면 메시지를 보낼 때 B 답을 받게되므로 메시지를 구별하는 문자열을 앞에 붙이지 않아도되지만 이전의 응답을 받기 전에 다른 메시지를 보내지 않도록 조심하십시오 ...
응답 형식이 어떻게 정해져 있는지 알면 식별 바이트가 필요하지 않습니다. 예를 들어 처음 4 바이트가 정수인 경우, 광고 내에서, 심지어 포인터,


사용 boost::serialization, 일반적으로 당신이 당신의 구조를 저장 ... 등 8 바이트에 떠 umb 바이트 버퍼, 네트워크를 통해 해당 버퍼 보내기 및 다른 쪽 역 직렬화하십시오.

This example shows how Boost.Serialization can be used with asio to encode and decode structures for transmission over a socket. boost :: asio를 사용하는 경우에도 직렬화 부분 만 쉽게 추출 할 수 있습니다.

+0

현재'boost :: serialization'과'boost :: asio' 그리고 그 잘 작동합니다! 감사! – Daniel

관련 문제