어떤 게임을 만들고 싶습니까? 턴 기반 또는 실시간?
소켓을 사용할 수 있고 수천 명의 사용자가 사용할 수있는 플래시 또는 실버 라이트 솔루션에 관심이 없으므로 자바 스크립트를 사용하고 아약스를 사용하여 데이터를 보내고받을 수 있습니다.
본질적으로 소켓과 같은 ajax를 사용하여 보낼 데이터가있을 때까지 서버가 서버에 응답하도록하여 "긴 폴링"하도록 서버에 입력을 보내면됩니다. 유일한 문제는 제한 시간 (~ 30 초)이 지나기 전에 만 연결을 열어 둘 수 있다는 것입니다. 데이터를 자주 앞뒤로 전달하기 때문에 일반적으로 문제는 아닙니다.
fastCGI를 연구하면 게임 서버 데몬이 직접 요청에 응답하도록 할 수 있습니다. 그렇게하면 단일 데이터베이스 연결을 열어 모든 클라이언트를 신속하게 처리 할 수 있습니다. 이것이 필수적은 아니지만 올바르게 구현된다면 실제로 확장 될 수 있습니다.
지금은 개념의 증거가 순진하다고합니다. (덜 순진한 상태로 데이터베이스를 사용하여 PHP 스크립트를 사용하여 데이터베이스 상태를 업데이트 및 수신하는 것보다 순진합니다. 소수의 사용자와 자신의 데이터베이스에 대해서는이 방법이 효과적입니다. 나는 20 명의 클라이언트가 100 ms 업데이트. 물론 그것은 잘 확장되지 않으며 클라이언트 당 초당 10 개의 연결로 데이터베이스를 종료하지만 "작동"합니다.) 기본적으로 자바 스크립트에서 패킷을 생성하고 PHP 스크립트로 보냅니다. 이 PHP 스크립트는 유닉스 도메인 소켓을 열고 데이터를 C++ 데몬에 전달합니다.벤치마킹을하지 않았으므로 규모가 얼마나되는지 말할 수는 없습니다.
편안함을 느낄 경우 플래시 및 소켓 네트워킹을 배우는 것이 좋습니다. Epoll을 Linux에서 사용하거나 IOCP를 사용하여 수백 대의 클라이언트를 호스팅 할 수 있습니다. 과거에 C# 소켓 서버에서 100 개의 클라이언트에 대한 테스트를 수행했으며 작은 패킷의 상수 스트림을 처리하는 CPU가 5 % 미만이었습니다.
내가하고있는 게임의 유형에 대해 언급하지 않으려 죄송합니다. 그것은 방대한 게임이 아닙니다. 글쎄, 나는 그것이 대중적으로 인기가 있다고 기대하지 않습니다. 그리고 나는 같은 게임을 동시에 2 명에서 4 명이해야합니다. – Jordi