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

3
我希望你能帮我或至少指导我方向。一切都是用C#编程,但客户端应用程序可以使用任何语言,只需要知道与服务器通信所使用的TCP协议。
我制作了一个包括大厅和游戏服务器的服务器应用程序。您可以挂载尽可能多的游戏服务器(实际上,我有三个,仅供测试,每个服务器都有不同类型的游戏)。
客户端应用程序连接到大厅进行身份验证等其他小事,并请求游戏...之后将被重定向到相应的游戏服务器。
所有在游戏过程中处理的信息,统计数据,聊天记录等都保存在PostgreSQL数据库中(您可以配置为使用MySQL,MS SQL)。
现在,玩家想要查询一些关于自己的过去信息或统计数据等...我的问题是:
1. 是否应该让玩家直接查询数据库,也就是从数据库服务器获取结果(发送相应的存储过程命令以获取结果)?
2. 或者(由于他们通过套接字与大厅服务器保持活动连接(以及与游戏服务器保持其他连接))
3. 我是否应该接收请求并通过大厅服务器使用永久活动连接套接字发送每个查询的结果?
4. 哪种方法最高效或甚至更安全?或者,您会推荐其他建议吗?
值得一提的是,所有游戏服务器都预计有5,000-10,000个并发连接甚至更多。
我忘了提到一些查询可能具有大量结果,我的意思是,500/2000行记录(行)和某些列。
我正在考虑通过套接字设置查询,在服务器上处理和打包查询,并将结果压缩后发送给玩家。
提前感谢您。

我认为这并没有什么歧义...对我来说是一个真正的问题...我只是想知道一些建议,实际上已经有一些好心人给出了建议...谢谢。 - camel
2个回答

2

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

无论如何,都不应直接从用户提交的信息构建查询。


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

0
最安全的解决方案显然是用户不知道 SQL-Server,而是大厅服务器处理所有连接和通信(假设两个服务器上都没有可利用的漏洞)。此外,你对安全实现有更多的控制权,只需要为一个用户(大厅服务器)授予读取和执行权限,而且很可能在同一个域中,仅为他需要获得这些权限的数据库。性能 < 安全,因此关于性能的问题其实并不重要,但是性能也实际上更多地取决于你的实现方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接