2010-01-27 3 views
4

인터넷을 통해 통신하는 간단한 2 인용 게임을 어떻게 만들 수 있습니까?모든 서버에서 사용자 지정 코드없이 인터넷을 통해 통신하는 간단한 2 인용 게임을 만드는 방법은 무엇입니까?

나는의 문제를 해결해야합니다

  • 조회 또는 랑데부 - 두 선수가 서로를 찾고 싶어요.

  • 진행중인 통신. 어느 플레이어라도 합리적인 빠른 시간 틀 (전자 메일 유형 대기 시간이 아닌 IM 유형 대기 시간)으로 상대방에게 정보를 전달해야하는 작업을 시작할 수 있습니다. 이와 관련

는, 나는 사람들이 서로를 찾을 수 있도록하려면 2 웨이 채팅에 해당한다고 가정하고 또한, 한번 짝, 서로 왕래.

또한 요구 사항 : 지금은

  1. , 끝점을 가정 윈도우 OS, 비교적 최근이다.

  2. 엔드 포인트 시스템이 인터넷에서 직접 액세스 할 수 없다고 가정하십시오. 들어오는 요청을 차단하는 방화벽 뒤에 숨어있는 클라이언트 시스템이라고 가정합니다. 컴퓨터는 아웃 바운드 요청을 할 수 있습니다. (HTTP를 통해 말하지만, TCP도 괜찮습니다)

  3. 통신은 개인적이어야합니다. 간단하게 이미 공유 된 비밀이 있다고 가정 해 봅시다. 끝점에서 AES를 수행 할 수 있습니다. 이것이 의미하는 바는 모든 중개자가 메시지 패킷을 해독 할 필요가 없다는 것입니다. 암호 해독은 엔드 포인트에서만 발생합니다.

  4. 모든 사용자 지정 코드는 클라이언트 PC에서만 실행해야합니다.

  5. 인터넷에 내 제어하에있는 서버가 없다고 가정합니다.

  6. 인스턴트 메시징 서버 또는 무료 IM 클라이언트 같은 상호 통신을 용이하게하기 위해 제 3 자 서버를 사용해 드리며, 사용자 지정 코드를 설치하지 않아도됩니다. 이 디자인을 용이하게 사용할 수있는 API를


?

메신저 API로이 작업을 수행 할 수 있습니까? WCF? Windows Messenger 용 WCF 채널이 있습니까?

어떤 프로토콜입니까? HTTP? 나는 이것을 "피어 - 투 - 피어 (peer-to-peer)"라고 태그를 붙였습니다. 그러나 나는 실질적으로 을 의미합니다.; 공식 P2P 프로토콜에 대한 까다로운 요구 사항은 없습니다.

어떤 메시지 형식을 사용 하시겠습니까?


편집

서버 주변의 요구 사항을 명확히하려면, 내가 원하는 내 CONTROL 세 미만의 서버에 없습니다. 그리고 어떤 서버에도 내 고객 코드가 없습니다. 그것은 "서버 없음"과 동일하지 않습니다.

이런 식으로 생각해보십시오. SMTP를 통해 전자 메일을 보내고받는 사람에게 보내는 사용자 지정 코드를 사용할 수 있습니다. 내 사용자 정의 코드는 무료 SMTP 서버 중개자를 통해 연결할 수 있습니다. SMTP 서버에 코드를 설치할 필요가 없습니다. 이것은 내가 원했던 것과 같지만 대기 시간 때문에 SMTP를 사용할 수 없습니다.

EDIT2

는 또한 발견이 : library for Instant Messaging, like libpurple, but written in C#


답변

나는 IM 프레임 워크에 대한 라이브러리를 사용하여, 내가 원하는 것을 할 수 있습니다. Windows Live Messenger를 사용하여이를 수행하는 간단한 방법 중 하나는 Messenger Activity SDK입니다. 이것은 개념을 증명하지만 실제로는 일반적인 해결책은 아닙니다. 그러나 libpurple과 같은 다양한 메신저 시스템 용 IM 라이브러리 나 IRC 채널 용 libs를 사용하여 유사한 작업을 수행 할 수 있습니다. 이 모든 경우에 IM 서버는 방화벽을 통과하는 통신 인프라로 작동합니다.

+0

어느 기계도 다른 기계에 직접 연결할 수 없거나 중간 서버를 사용할 수 있더라도 두 대의 기계가 서로 연결되도록하고 싶습니까? –

+0

요구 사항은 * server *가 아니거나 * custom code *가 필요하지 않습니까? – kyoryu

+0

제 3 자 서버에는 사용자 정의 코드가없고 내 통제하에있는 인터넷 기반 서버는 없습니다. 예를 들어 GAE가 없습니다 (GAE에 호스팅 된 통신 릴레이 앱이 없으면 * 사용할 수 있습니다 *). 호스팅 된 Linux 상자가 없습니다. 나는 내 질문에 편집하여 명확하게하려고 애썼다. – Cheeso

답변

1

libpurple과 함께 otr을 사용하면 이러한 응용 프로그램에 필요한 개인 정보를 보호 할 수 있습니다.

+0

가 흥미로운 것 같습니다. GTK +를 쓰고 싶지는 않습니다. – Cheeso

+0

libpurple에는 libotr이 아니며 GTK +가 필요하지 않습니다. –

+0

오케이, 나는 "libpurple은 무엇인가?"라고 오해하고 있습니다. 페이지. 이제 나는 관심이있다. 더 많은 것을 읽을 필요가있다. – Cheeso

3

모든 2 인 게임에는 적어도 두 명의 클라이언트/플레이어간에 통신해야하는 기본적 필요성에 따라 일부 유형의 서버 환경이 있어야합니다. 각 클라이언트/플레이어는 자체 서버로 작동하여 다른 연결된 클라이언트와 통신 할 수 있습니다. 그러나 주어진 시간에 모든 클라이언트/플레이어를 감시 할 필요성과 다른 클라이언트/플레이어 검색을 원할히해야하는 필요성은 본질적으로 어떤 유형의 서버 환경을 필요로합니다.

+0

"서버가 없다"는 말은하지 않았습니다. 내가 원하는 것은 "통제 할 수있는 서버가 없다"와 "서버에 설치된 모든 사용자 지정 코드가 없습니다"입니다. 즉, 나는 통신을 용이하게하기 위해 서버 기반의 코드를 작성하고 싶지 않다. – Cheeso

0

많은 충돌 요구 사항이 있습니다. 들어오는 요청을 차단하는 방화벽 뒤에있는 두 클라이언트 모두 어느 쪽도 컴퓨터가 서버로 작동 할 수 없기 때문에 피어 2 피어를 수행 할 수 없다는 것을 의미합니다. 그리고 각 클라이언트에 메시지를 라우팅하는 중간에 전송 서버가 있어야합니다. 지금 당장 당신이 요구하는 것은 서버가 필요 없다는 점을 감안할 때 가능하지 않습니다.

+0

아니 ** 서버 **. reqmt는 ** 내 통제하에있는 서버가 없습니다 **, ** 내 사용자 정의 코드를 실행하는 서버가 없습니다 **. – Cheeso

+0

당신은 어떤 클라이언트 (또는 다른 기계)가 어떤 경우에도 서버로 작동해야한다는 것을 이해하지 못합니다. 두 클라이언트가 들어오는 요청에 대해 차단 된 경우 두 클라이언트를 함께 연결하는 세 번째 서버가 있어야합니다. –

+0

퍼지, 틀렸어. 클라이언트 중 하나는 서버로 작동 할 필요가 없습니다. 그것이 당신이 생각하는 것이라면, 당신은 문제 공간을 이해하지 못합니다. – Cheeso

0

플레이어가 서로 찾을 수 있도록 무료 메시지 보드 서버 중 하나에 메시지 보드를 설치할 수 있습니다. IP 주소를 교환하기 위해 개인 메시지를 사용하는 것이 좋습니다. 그런 다음 IP 주소를 사용하여 연결하는 프로토콜을 사용하십시오. 좋은 결과 내길 바랄 게. 방화벽으로 인해 고통을받습니다.

물론, 한 쌍의 컴퓨터가 서버 역할을하고 다른 클라이언트는 클라이언트 역할을해야합니다. 소프트웨어에는 두 가지 코드 세트가 모두 포함되어 있어야합니다. 나는 그런 게임을 작성했으며 통신 코드가 조금 혼란 스럽다는 것을 알 수 있습니다.

통신을 용이하게하기 위해 웹 서비스를 작성하면 인생에서 훨씬 행복해 질 것이라고 지금 당장 말할 수 있습니다. 그러나 그런 다음에는 서버가 필요합니다.

행운을 빈다. 너는 그것을 필요로 할 것이다.

또는 Microsoft 메신저와 같은 IM 클라이언트 용 게임을 작성할 수 있습니다. 나는 그 게임을 보았다. 그래서 나는 그것을 할 수 있다는 것을 안다.

+0

기존 IM 서버에서 피기 백킹은 옳은 것처럼 보입니다. 방법? – Cheeso

0

누군가 말했듯이 2 명의 플레이어간에 중재 된 서버가 없다면 아직 그렇게 할 수 없습니다. 타사 서버를 사용해도 행복하기 때문에 HTTP를 통해 Google App Engine + XMPP을 사용하여 시스템을 구축하는 것이 좋습니다. 그것은 인터넷과 방화벽 뒤에서 멋지게 작동합니다. 그럼에도 불구하고 무료입니다 (시스템이 GAE 할당량을 초과하지 않는 한).

+0

요구 사항은 내 컨트롤에 서버가 아닙니다. 그리고 어떤 서버에도 내 고객 코드가 없습니다. 그것은 "서버 없음"과 동일하지 않습니다. – Cheeso

+0

그런 경우에는 XMPP 호환 IM 서버 (google talk, jabber.org ...)를 사용하고 PL 바인딩 (C#?)을 지원하는 XMPP 라이브러리를 찾을 수 있습니다. 이 URL을 확인하십시오 : http://xmpp.org/software/libraries.shtml. XMPP는 다른 IM 프로토콜보다 우세하고 많은 XMPP 서버를 사용할 수 있으므로 XMPP를 사용해야합니다. – instcode

+0

클라이언트가 들어오는 연결을 허용 할 수없는 한 서버, 클라이언트 또는 세 번째 시스템으로 작동해야하는 것이 있습니다. 그러면 차단 된 두 클라이언트를 조정하는 서버로 세 번째 시스템이 필요합니다. 얼마나 많은 시간을 당신이 모든 대문자로 말할지라도 당신이 구현에 놓고있는 상충되는 제한 때문에 당신이 원하는 것을 할 수 없다는 사실을 바꾸지는 않습니다. –

0

방화벽 제한으로 피어 투 피어가 있습니다. 이것은 어쨌든 디렉토리 서비스에 대해 쉽게 작동하지 않습니다.

내가 사용할 수있는 다음 쉬운 방법은 매우 저렴한 웹 호스팅 사이트 중 하나에서 매우 간단한 CGI 서버 스크립트를 버리는 것입니다. 이 길로 가고 싶지 않은 것 같습니다. 특별한 이유가 있습니까? 100 줄의 코드와 매우 저렴한 서버는 여러분에게 요구하는 모든 것을 제공해야합니다.

제 3 자 채팅 라이브러리에 연결하는 것이 좋습니다. 현재 IM 프로토콜에 대해서는 알지 못하지만 좋은 IRC와 게임을위한 별도의 채널이 작동합니다. FTP를 사용하여 무언가를 함께 자갈 수도 있습니다. 무료 블로그 사이트에 블로그 의견도 작동합니다. 그 이유는 무엇입니까?

이들은 모두 kludges입니다. 그들은 일을 둔하고 우아하고 가난하게 축소시키는 방식으로 수행합니다.

웹 서버 솔루션을 재검토 해 주시기 바랍니다.

+0

채팅 프로토콜에 연결하는 경우, libpurple 및 msnpsharp가 지금까지 좋은 것처럼 보입니다. 전혀 괴롭지 않습니다. 이것이 IM 클라이언트가 작동하는 방식입니다. – Cheeso

+0

사용자가 제어하지 않고이 응용 프로그램 용으로 설계되지 않은 타사 인프라를 사용하고 있습니다. 또한 코드 복잡성이 추가됩니다. IM 서버의 서비스 약관을 위반할 수도 있습니다. 이것은 괴롭다. 그렇다면 라이브러리가 도움이된다면 바로 가서 사용하십시오. 자신을 위해 추가 작업을 추가하고 앱의 중요한 부분을 포기한다는 것을 이해합니다. – user1647075

2

IM이 잘못된 도구입니다. 대신, IRC 대화방을 사용하십시오.

IRC 대화방을 사용하면 클라이언트가 대화방에 "로그인"하여 "현재 상태"로 사용됩니다. 대화방에있는 누구나 게임을 할 수 있습니다.

일단 게임 인스턴스가 완료되면 대화방을 통해 서로 통신합니다. 그들은 전역 채널을 사용할 수도 있고 단순히 게임 트래픽을위한 개인 IRC 채널을 사용할 수도 있습니다.

이슈를 해결하기 위해 :

  • 첫째, 모든 게임 상태는 클라이언트에서 공유됩니다. 많은 게임들이 이것을 해냈습니다 (Age of Empires, 디아블로 같은 RPG). 그러나 클라이언트 국가는 해킹과 속임수에 취약합니다. 그것은 단순한 진리입니다. 게임이 인기가 있다면, 해킹 당할 것입니다.

  • 트래픽을 핑합니다. 기본적으로 방에 로그인하면 클라이언트가 "재생 가능"모드입니다. 그렇다면 그들은 재생할 수 있는지 누구에게나 핑 소리를냅니다. 이것은 모든 클라이언트가 대화방에 "로그인"할 때 발생합니다. 그런 다음 브로드 캐스트 이벤트를 위해 공개 방을 사용할 수 있습니다. "프랭크는 새로운 게임을 할 준비가되었습니다", "프랭크는 조와 게임을 시작했습니다"등은 게임을 동기화 상태로 유지하는 데 도움이 될 수 있습니다. 그러나 클라이언트가 채팅에 연결하면 방, 그것은 갈거야 "안녕 모두, 밥, 너 뭐하니?" 그래서 당신은 그것을 관리해야합니다.

  • 트래픽 볼륨. IRC 룸은 많은 트래픽을 처리 할 수 ​​있지만 많은 트래픽을 처리 할 수는 없습니다. 대부분은 "스패밍", "범람"등을 방지하도록 설계되었으므로 게임 플레이에서 속도가 제한 될 수 있습니다. "검수원"에 대해서는 문제가 아니며, 40 명의 인명 피해 공격 중 "월드 오브 워크래프트"에 대해서는 더 그렇습니다. 게임 디자인 문제입니다.

  • 서비스 약관. IRC 제공 업체는 "아뇨, 우리 서비스로 그렇게 할 수는 없습니다"라고 말할 수 있습니다. 나는 그것을 들여다 보지 않았으므로 모르겠다. 그러나 문제가 될 수있다.

이외에도 IRC는 꽤 적합합니다. 그물에 떠 다니는 많은 IRC 봇 코드들, 나는 그것들을 사용하지 못했습니다.

관련 문제