2011-09-29 75 views
3

我希望你能帮助我,或者至少让我指向方向。 所有的东西都在c#中编程,但客户端应用程序可以用任何语言,只需要知道用于与服务器通信的tcp协议。从多人游戏中获取数据库结果

我做了一个服务器应用程序,其中包括一个大厅和一个游戏服务器。您可以根据需要安装尽可能多的游戏服务器(实际上,我有三个,只是为了测试,每个游戏都有不同类型的游戏)。

客户端应用程序连接到大厅进行身份验证,nd其他小东西,并请求游戏......在此之后,它被重定向到合适的游戏服务器。

游戏过程中处理的所有信息,统计数据,聊天记录......都保存在PostgreSQL数据库中(您可以对此进行配置以使用MySQL,MS SQL)。现在

,球员想提出一些疑问,让过去信息有关自理,或统计数据,或任何...我的问题是:

¿我要保持球员直接查询数据库,我的意思是获得数据库服务器的结果(发送相应的sotre过程命令以获得结果)?

或(由于他们保持积极的活着的大厅服务器通过套接字(和anothers与游戏服务器)连接)

¿难道我收到的请求,并通过大厅服务器使用永久发送的每个查询的结果活动连接套接字?

¿哪一个是最高性能甚至是安全的?或¿你会推荐另一个建议吗?

很高兴地说,在所有游戏服务器上都会有5.000-10,000个并发连接,甚至更多。


.-我忘记提及某些查询可能有很大的结果,我的意思是500/2000条记录(行)有一些列。 .-忘了说我正在考虑通过套接字设置查询,处理和打包服务器中的查询并将结果发送给播放器(一个或多个)压缩(压缩)。

在此先感谢

E/R

+0

我觉得没有这样的ambiguety ...对我来说是一个真正的问题...我只是想知道一些建议,实际上已经给了一些不错的人...谢谢 – camel

回答

2

您应该绝对不会有玩家客户端直接提交查询您的数据库服务器;你的游戏服务器应该有自己的协议来处理客户提交的查询,而'游戏查询服务器'应该在构建实际的SQL之前对这些查询进行合理检查。

尽管如此,在任何情况下都不应该直接从用户提交的信息构建查询。

+0

+1,此外他不应该同时返回500/2000条记录。什么用途?用户不太可能浏览所有内容。发送分页结果。 – jgauffin

0

最安全的是用户不知道SQL-Server的解决方案,也就是大厅服务器处理所有连接和通信的位置(假设在任一服务器上都没有可利用的错误)。此外,您还可以更好地控制安全实施,让一个用户(大厅服务器)(最有可能位于同一个域中)完全被读取并执行权限,以便只准许他拥有这些权限的数据库。性能<安全性,因此关于性能的问题实际上并不重要,但是性能实际上也是您实施的问题。