2012-12-19 4 views
3

Flex에서 게임을 개발 중입니다.
이 게임에는 AIR 버전과 웹 버전이 있습니다. AIR 응용 프로그램은 포트에서 UDP 소켓을 사용하여 서버에 연결합니다. 웹 버전의 목적은 사용자가 직장에있을 때 또는 일부 방화벽/프록시를 사용하여 일부 포트를 차단하는 컴퓨터에서 재생할 수있게하는 것입니다. 따라서 웹은 포트 80에서 http 연결을 사용하는 서버에 연결합니다.소켓 udp 및 http 연결을 모두 수신하는 서버 코드

http 연결에 응답하는 서버 코드는 BlazeDS를 사용하는 Java 서블릿입니다. 그러나 C# 서버 코드 (webservices 또는 기타)에 대해 설명하기가 더 쉽다면 괜찮을 것입니다. UDP 요청에 응답하는 서버 코드는 소켓 연결을 수신하는 간단한 클래스입니다.

제 문제는 UDP와 http 코드를 함께 쓰는 방법을 모르겠다는 것입니다. 5 개의 AIR 클라이언트와 5 개의 웹 클라이언트가있는 경우 서버에서 공통 콜렉션 변수를 모두 충족시켜야하므로 모든 클라이언트를 최신 정보로 업데이트 할 수 있습니다. 누가 소켓을 청취하는 클래스를 인스턴스화 할 것입니까? 그리고 언제?

요약하면 다음과 같습니다.
1. 내가 원하는 것을 얻으려면 전용 서버가 필요합니까?
2. 누가 udp 처리 클래스를 인스턴스화합니까?
3. http 연결에 대한 udp 처리 클래스와 서블릿을 함께 유지할 수 있습니까? http가 없으면 바람둥이조차 필요하지 않습니다. 하지만 http와 udp 코드는 함께 있어야하므로 플레이어 컬렉션을 업데이트 할 수 있습니다. UDP 처리 클래스를 인스턴스화하고 서블릿이 서버에 전개 될 때 소켓을 청취 할 수 있습니까?

모든 조언을 환영합니다. 사전에
감사합니다,
미하

답변

1

HTTP 및 UDP 코드가 함께

아니 그렇지 않은를 유지해야합니다. 게임 데이터를 전송하는 메커니즘이므로 투명해야합니다. UDP 및 HTTP 서버는 게임 백엔드에 어떤 방식으로 연결되어야합니까? 백엔드 코드에서 직접 HTTP 및 UDP (소켓) 모듈을 사용하여 메모리에있을 수도 있고 일종의 서비스를 사용할 수도 있습니다 (따라서 다른 채널이 동일한 백엔드와 통신 할 수있게 할 수 있습니다).

이 게임 백엔드는 사용자에게 직접 연결하지 않지만 UDP 및 HTTP 모듈과 만 통신합니다.

그런 다음이 백엔드에서 수신 한 메시지를 HTTP와 UDP에서 처리하고 동일한 채널을 통해 응답을 보냅니다.

예 :

  1. AIR-클라이언트 1 UDP 서버에 유효한 로그인 메시지를 보냅니다.
  2. UDP 서버가 게임 백엔드에 로그인 메시지를 전달합니다.
  3. 게임 백엔드가 UDP 서버에 성공적인 결과 메시지를 반환합니다.
  4. UDP 서버는 결과 메시지를 AIR-client 1에 전달합니다.

예 2 :.

  1. 이제 HTTP 클라이언트 이미 로그인 될 일 1, 현재 로그인 한 모든 사용자 요청은 HTTP 서버에, 그래서 HTTP를 통해 않습니다.
  2. HTTP 서버가이 요청을 게임 백엔드로 전달합니다.
  3. 게임 백엔드가 HTTP 서버에 정보를 반환합니다.
  4. HTTP 서버가 클라이언트에 응답을 반환합니다.