首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于使用websockets和node.js编写可伸缩的基于实时转向的策略游戏的建议

关于使用websockets和node.js编写可伸缩的基于实时转向的策略游戏的建议
EN

Stack Overflow用户
提问于 2012-05-09 01:29:44
回答 3查看 1.8K关注 0票数 3

我计划使用websockets在node.js之上编写一个基于实时转向的策略游戏服务器。我将迎合现代浏览器与良好的html5支持,不太关心向后兼容性。

每次提供的游戏将由少数玩家一次(比如2-10)进行/观察,并将有一个时钟定时器,用于国际象棋,并在www.chess.com上实现。计时游戏最多持续一个小时&也可能有非定时游戏的选择。

服务器将处理玩家的评分,玩家的好友列表,以及管理运行/完成游戏状态,以及运行游戏时钟。游戏状态将只是一些json,最多是几千字节的每场比赛。

一个限制因素是,所有实际游戏逻辑的必须在客户机上进行,而不是在我的服务器上。因此,我需要一种机制,如果客户端发出非法移动的信号,或者因为它或它的对手是故障/恶意的,那么一个或多个无关的客户端(即其他人使用我的站点)将把游戏状态加载到他们的浏览器中,然后争端就会在那里得到解决。

这就是我的要求的总结。

这不是一个玩具项目,我希望有许多用户,所以我想考虑的后端架构和可伸缩性的前面。我对node.js或网站部署没有特别的了解,所以对于vis体系结构、技术/库、可伸缩性/代理/负载平衡、如何实现时钟和处理延迟问题、在哪里/如何存储游戏状态等,我都非常欣赏。

EN

回答 3

Stack Overflow用户

发布于 2012-05-09 03:25:34

Node.js及其流行库的编写考虑到了可伸缩性,所以…像express、mongodb/redis、socket.io这样的通用工具会做得很好。

关于客户端逻辑:

一个或多个无关的客户(即其他人使用我的网站)将游戏状态加载到他们的浏览器在后台,争议将在那里解决。

node.js的一个伟大之处在于它与浏览器中的javascript相同。)以便您可以在服务器中运行相同的代码,并解决那里的任何争议。

票数 1
EN

Stack Overflow用户

发布于 2012-05-09 03:26:46

任何项目的第一件事是列出一份技术要求清单。下面是一个基于您在文章中所写内容的示例:

  1. “服务器将负责.”--帖子中的项目列表表明您需要某种类型的用户登录身份验证机制。
  2. “玩家的评分,玩家的朋友名单”--这些需要存储在某种数据库中。
  3. “管理运行/完成游戏状态,运行游戏时钟”-连接到运行会话的玩家之间的实时数据处理。
  4. 如果计划存储匹配的结果,则需要将实时应用程序与数据库存储进行接口。
  5. “所有实际的游戏逻辑都必须发生在客户端上”--您见过浏览器查询吗?游戏的最大问题是所有的用户信息都存储在客户端上。要想在游戏中获得所有好处,只需手动编辑localStorage即可。我唯一能想到的就是把整个游戏逻辑编码到浏览器中,然后用每个连接的客户端来验证每一个动作。但这就产生了一个问题,用户可以修改逻辑来对应该合法的举动提出异议。

当您有一个定义明确的项目技术需求列表时,应该更容易找到您要寻找的库。例如,socket.io是处理web套接字的优秀库。

票数 0
EN

Stack Overflow用户

发布于 2012-05-09 19:37:11

游戏代码“不可信”有什么原因吗?您需要做的就是验证JSON输入,并且移动不违反任何规则。在不知道更多细节的情况下,我不确定如何解决客户之间的纠纷,但我不知道为什么游戏代码不能被信任。

这个问题听起来实际上类似于我读过的一篇关于分布式碰撞检测和解析的论文,它减少了服务器网络的压力。这是通过让所有的‘客户’投票的未来状态是可预测的,在那里每个客户直接。如果没有争议,就达成协议,游戏继续进行。如果存在争议,并且无法达成协议,则该移动将被中止。

它也给出了一些有趣的想法,是否投票是‘及时’(你可能不必处理这个场景,因为你的游戏是基于转弯的)。

与其在无法到达冲突时中止移动,不如编写一些逻辑来确定移动是否有效。这里很难回答您的问题,因为除了服务器(服务器甚至不能信任游戏代码本身),您似乎无法信任任何东西。

我认为,为了可靠地解决这个问题,您可能需要使用现有的一个想法:在服务器上启动一个沙箱游戏,询问一个无关的客户端(这可能不可靠),或者删除其中一个约束,然后直接询问服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10508728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档