2011-09-29 6 views
3

나를 도울 수 있거나 적어도 나를 지시 할 수 있기를 바랍니다. 모든 것이 C#으로 프로그래밍되었지만 클라이언트 응용 프로그램은 언어와 상관없이 서버와 통신하는 데 사용되는 TCP 프로토콜을 알아야합니다.멀티 플레이 게임에서 데이터베이스 결과 얻기

로비와 게임 서버가 포함 된 서버 응용 프로그램을 만들었습니다. 필요한만큼 많은 게임 서버를 탑재 할 수 있습니다 (실제로는 테스트 용으로 각기 다른 종류의 게임을 가지고 있습니다).

클라이언트 응용 프로그램은 인증을 위해 로비에 연결하고 기타 작은 것들을 요청하고 게임을 요청합니다 ...이 후 적절한 게임 서버로 리디렉션됩니다.

경기 도중 처리 된 모든 정보, 통계, 채팅 등은 PostgreSQL 데이터베이스에 저장됩니다 (MySQL, MS SQL 사용을 위해 구성 할 수 있음).

¿ 내가 얻을 말은, 플레이어가 직접 데이터베이스를 조회 유지하십시오 :

이제 선수들은 내 질문은 ... 스스로가, 나 통계, 또는 무엇이든에 대한 과거 정보를 얻기 위해 몇 가지 질의를하고 싶습니다 결과를 얻기 위해 각각의 sotre 프로 시저 명령을 보내는 데이터베이스 서버의 결과?

또는

가 ¿ (그들은 게임 서버)와 활성 살아 소켓에 의해 로비 서버와의 연결 (및 anothers의 유지로 인해) I는 요청을 받고 영구를 사용하여 로비 서버를 통해 각 쿼리의 결과를 보내 마십시오 활성 연결 소켓?

¿ 어느 것이 가장 성능이 좋고 안전합니까? 또는 ¿ 다른 제안을 권합니까?

5.000 - 10.000 동시 연결 이상이 모든 게임 서버에서 예상되는 것이 좋습니다.


는 .- 좀 쿼리가 큰 결과를, 내 말은 약간의 열이있는 2,000분의 500 개 기록 (행) 한 수 있음을 언급하는 것을 잊었다. .- 소켓을 통해 쿼리를 설정하고, 서버에서 쿼리를 처리 및 패키징하고 결과를 플레이어에 압축 (압축)하여 보내는 것을 잊어 버렸습니다. 사전에

감사

E/R

+0

나는 그런 모호함이 없다고 생각한다. 그리고 나에게는 진짜 질문이있다. 나는 단지 좋은 사람들에게 주어진 몇 가지 제안을 알고 싶다 ... 감사합니다. – camel

답변

2

당신은 절대적으로 필요는 없습니다 클라이언트가 직접 데이터베이스 서버에 쿼리를 제출하는 선수; 게임 서버는 클라이언트가 제출하는 쿼리에 대해 고유 한 프로토콜을 가져야하며 '게임 쿼리 서버'는 실제 SQL을 작성하기 전에 해당 쿼리를 정상적으로 검사해야합니다.

사용자 제출 정보에서 직접 쿼리를 작성해야하는 경우는 없습니다.

+0

+1 그는 500/2000 기록을 동시에 반환해서는 안됩니다. 그게 무슨 용도예요? 사용자가 모두를 탐색 할 가능성은 없습니다. 페이징 된 결과를 보냅니다. – jgauffin

0

대부분의 보안은 사용자가 SQL 서버를 모르는 솔루션, 즉 로비 서버가 모든 연결과 통신을 처리하는 솔루션입니다 (두 서버 중 하나에서 악의적 인 버그가 없다고 가정). 또한 동일한 도메인에있는 한 명의 사용자 (로비 서버)가 해당 권한을 필요로하는 데이터베이스에 대해서만 읽기 및 실행 권한을 얻는 등 보안 구현을보다 효과적으로 제어 할 수 있습니다. 성능 < 보안, 따라서 성능에 관한 질문은별로 중요하지 않지만 성능은 실제로 구현의 문제이기도합니다.

관련 문제