在 node.js 中分离游戏服务器和 Web 服务器

Posted

技术标签:

【中文标题】在 node.js 中分离游戏服务器和 Web 服务器【英文标题】:Separating Game Server and Web Server in node.js 【发布时间】:2012-12-03 11:41:35 【问题描述】:

我几乎用 node.js 和 socket.io 完成了一个回合制多人游戏。

我有 express.js 作为网络服务器,另一个类作为游戏服务器,使用 socket.io。

我的问题是这两个在同一个应用程序中运行。我有一个网页登录页面,用户可以在其中登录并查看他们的玩家详细信息并在大厅中聊天。现在直到这里没有任何与游戏逻辑相关的东西。所以我问自己为什么这个游戏服务器与网络服务器在同一个应用程序中运行。另请注意,将来可能会有不同的服务器,例如(欧洲服务器、美洲服务器、亚洲服务器等),但相同的登录页面和登录机制会保留。

那么实现这一目标的完美方法是什么?

我应该制作两个单独的 node.js 应用程序,一个网络服务器和一个游戏服务器。但是在这种情况下,我可以在套接字和请求之间共享会话数据吗?

另一个缺点是在浏览网站时,任何意外行为都可能导致网络服务器抛出异常并关闭应用程序,从而也关闭游戏服务器。

【问题讨论】:

【参考方案1】:

您可能拥有完全独立的 node.js 应用程序和一个公共会话存储(例如 Redis),以在允许访问游戏服务器之前检查用户是否通过了网络服务器的身份验证。公共会话存储还有助于同时使用游戏服务器,而不仅仅是一台 Web + 一台游戏服务器。

您也可以通过捕获所有错误来阻止关闭应用程序,但通常不建议这样做。

后期编辑: 以下是有关会话存储的优点和缺点的一小部分列表。它不适用于 node.js,但它适用于这里: http://techwhizbang.com/2009/12/memcache-session-store/

【讨论】:

发布此问题后,我对该问题进行了更多调查。看起来,对于 node.js,最好的选择就是你建议的。你对这个问题的回答是正确的。但我想了解更多。对于这种情况的解决方案,而不是基于 node.js 和 redis 的解决方案,您会分享您对架构的看法吗?

以上是关于在 node.js 中分离游戏服务器和 Web 服务器的主要内容,如果未能解决你的问题,请参考以下文章

在 Web 应用程序中分离 BLL、PL 和 DAL

在 Visual Studio 中分离项目时遇到问题

ASP.NET 5 ,想要将实体框架从 Web 项目中分离出来

在 ECS 中分析生产 node.js 服务器

Node.js简介

Node.js:创建应用+回调函数(阻塞/非阻塞)