2011-08-02 3 views
0

게임 서버와 인터페이스하는 작은 클라이언트에서 작업하고 있습니다. 서버는 HTTP를 통해 연결된 클라이언트에게 메시지를 전송합니다. 클라이언트로 들어오는 텍스트 메시지를 구문 분석하고 답장을 보내서 비교적 쉽게 되돌릴 수 있습니다. 내가 알아 내기 위해 노력하고있어 이제 어떻게다양한 유형의 메시지를 처리하는 일반적인 방법

는 과정을 파괴하는 방법입니다. 스레드가 메시지를 받고, 일부 데이터 개체로 파싱 한 다음이를 처리 할 "수신"큐에 배치하려고합니다. 그런 다음 다른 스레드가이 큐에서 메시지를 읽고이를 처리 (클라이언트의 두뇌 또는 AI) 한 다음 서버에 응답을 보냅니다.

는 그 오버 헤드가없는 (등 메시지를 헤어지고, 밖으로 중요한 데이터를 가져) 텍스트를 처리 할 들어오는 데이터를 감시 스레드 때문에 AI 스레드를 갖고 싶어. 그러나 문제는 서버가 몇 백 가지 유형의 메시지를 클라이언트에 보낼 수 있다는 것입니다 (클라이언트가 볼 수있는 것, 다른 플레이어, 발사하는 경우 등). 이 데이터를 깔끔한 작은 구조로 묶어서 AI가 신속하게 처리 할 수 ​​있도록하고 AI를 쉽게 다시 작성할 수있게하려고합니다.

하지만 어떻게 내가의 큐 뭔가를 잡아 당기은 메시지의 유형을 알 수있는 함수를 작성 않는 (그래서 메시지에 포함되는 데이터 내가 아는)?

예 메시지 :

살아 (당신이 살아있는 경우를 말한다) 그것은 단지 하나의 데이터 객체 (당신이 손상된 경우 알려줍니다)

DAM는 현재 게임 시간이

데이터가 풍부하고, 누가 당신을 손상 시켰으며, 얼마나 많은데, 총이 무엇인지, 볼 수 있다면, 등이 있습니다.

개체를 만들 수 있습니다. at는 이러한 다양한 메시지 유형을 모두 처리 할 수 ​​있으며 단일 함수로 해석 할 수 있습니까?

내가 여기에 전체 솔루션을 찾는 게 아니에요

이 딱 맞는 날 지점 ... 거의 메시지는 공통 속성을 가지고, 그래서 상속 또는 하나 개의 정말 큰 메시지 클래스는 아주 좋은 것입니다하게 생각하지 않는다 방향과 희망 나는 당신이 프로토콜이라고에 대해 요구하고 기본적으로 무엇을

+0

이것을 프로토콜이라고합니다. 어려운 방법은 자신을 정의하는 것입니다. 쉬운 방법은 라이브러리를 사용하는 것입니다. 내가 프로토콜 버퍼 (Google) 또는 절약 (페이스 북에 의해)을 제안 할 수도 ... –

+0

@Chris - 최고. 나는 Google의 프로토콜 버퍼를 사용할 것이라고 생각합니다. 답변에 댓글을 남기고 싶다면 – Veaviticus

답변

3

:-) 길에 조금 배울 수 있습니다 : 데이터 교환 및 해석 방법에 대해 설명합니다. 전통적으로 자신 만의 것을 정의 할 수 있습니다 (그리고 명령의 끝을 나타내는 일반 텍스트 데이터를 개행 문자와 함께 보내는 등). 잠시 후 당신은

다행히 당신을 위해 인생을 더 쉽게 만들 수 밖에 라이브러리가 (당신이, 등? 등 오류를 처리 어떻게? 바이너리 데이터를 처리 할 방법) 이상이 필요하다는 것을 인식하기 시작한다. 요즘 나는 대부분의 필요에 대해 간단한 RPC와 같은 라이브러리를 선호하는 경향이 있습니다. 그 예로 프로토콜 버퍼 (Google 제공), Apache Thrift (Facebook 제공) 및 Apache Avro가 있습니다.

+0

+1 Google의 시험에 동의합니다. zmq로 믹스하면 완료됩니다.) – Josh

관련 문제