从多人游戏中获取数据库结果

时间:2011-09-29 05:36:29

标签: c# database sockets multiplayer

我希望你能帮助我,或者至少指出我的方向。 所有内容都是用c#编写的,但客户端应用程序可以是任何语言,只需要知道用于与服务器通信的tcp协议。

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

客户端应用程序连接到大厅进行身份验证,以及其他小事情,并请求游戏......之后它被重定向到适当的游戏服务器。

游戏过程中处理的所有信息,统计信息,聊天内容......都保存在PostgreSQL数据库中(您可以将其配置为使用MySQL,MS SQL)。

现在,玩家想提出一些问题来获取有关自己,统计数据或其他内容的信息......我的问题是:

¿我应该让玩家直接查询数据库,我的意思是从数据库服务器获取结果(发送相应的sotre procedure命令以获得结果)?

或(由于他们通过套接字(与游戏服务器的其他人)保持与大厅服务器的活动连接)

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

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

可以说在所有游戏服务器上预计会有5.000 - 10.000个并发连接甚至更多。


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

提前致谢

E / R

2 个答案:

答案 0 :(得分:2)

您绝对不应让玩家客户直接向您的数据库服务器提交查询;您的游戏服务器应该有自己的协议用于客户端提交的查询,“游戏查询服务器”应该在构建实际SQL之前对这些查询进行健全检查。

但在任何情况下,您都不应直接根据用户提交的信息构建查询。

答案 1 :(得分:0)

最安全的是用户不知道SQL-Server的解决方案,即大厅服务器处理所有连接和通信的地方(假设在任一服务器上都没有可利用的错误)。此外,您可以更好地控制安全性的实现,让一个用户(大厅服务器)(最有可能位于同一个域中)获得读取和执行权限,这些权限仅用于拥有这些权限所需的数据库。性能<安全性,因此关于性能的问题确实无关紧要,但是性能实际上也是你实现的问题。