当前位置: 首页 > 知识库问答 >
问题:

动态垂直-如何正确设计垂直。简单垂直的x架构。x游戏?

楚鸿波
2023-03-14

我正在尝试为Vert开发概念验证。一款简单的实时浏览器游戏。

让我们想象一个类似于在线扑克的游戏——你有一个大厅,里面有许多你可以加入的现有游戏。你也可以创建一个新游戏(所以大厅里的游戏数量是可变的)。在这之前,你有一个异步超文本传输协议服务器(集群),玩家可以连接到它。尤其是在特定的游戏中,一切都是实时的,所以当玩家执行某个操作时,其他人会立即看到它,而无需刷新或定期ajax轮询

我在考虑如何将此功能分解为竖线。我的第一个想法是创建一个用于处理http连接的垂直体(并将http服务器设置为向http客户端公开eventbus上的选定事件),另一个垂直体表示游戏大厅,第三个垂直体表示实际游戏。大厅和游戏的垂直站点只知道事件总线,根本不处理http。

我唯一不清楚的是这些垂直线的范围,尤其是游戏垂直线,因为会有更多(html" target="_blank">动态数量的)游戏。默认情况下,您部署固定数量的特定verticle实例(在简单的应用程序中,通常只有一个)。在这种情况下,这条竖线必须在eventbus上侦听游戏的事件,确定该事件属于哪个游戏,反序列化游戏状态,更改它,序列化它并再次存储它。然后通知所有连接的玩家。

相反,我想做的是,每个游戏实例都有一个垂直的范围。我的意思是,当在大厅中创建一个新游戏时,大厅垂直链接将启动游戏垂直链接的一个新实例,以某种方式传递给它一个新的游戏ID(因此它可以仅为该游戏ID绑定事件),并且该游戏垂直链接将在内存中的实例变量中存储该特定游戏的状态。游戏结束后,verticle将指示连接的浏览器返回大厅并销毁自己。

我的想象方式正确吗?如果是,实现这一目标的最佳方法是什么?尤其是关于动态创建和销毁垂直实例的部分,将一些信息(ID等)传递给新创建的垂直?

一个额外的问题-我如何限制玩家只能收听(和发送)他所属游戏中的事件?这样他就不会影响其他比赛了。在传统的JavaServlet/EE应用程序中,会话/访问管理的操作与此基本相似。

共有1个答案

羊舌自强
2023-03-14

由于有一段时间没有答案,我按照问题中最初描述的方式实现了它。它实际上非常顺利,演示代码可以在这里找到:https://github.com/michalboska/codingbeer-vertx

有一个Verticle(GameLobbyVerticle)为每个游戏启动一个新的GameVerticle实例。GameVerticle实例会记住(在成员变量中)与特定游戏实例相关的所有状态。

每个实例还创建几个EventBusendpoint(地址包含唯一的游戏ID,这样每个GameVerticle实例都有自己唯一的EventBusendpoint),并侦听系统消息、玩家输入并向连接的玩家广播事件。每个实例都有“public queue”(可由WebSocket客户端通过eventbus桥访问)和“private queue”(不可通过桥访问,用于我们不希望客户端欺骗的系统消息)。

使用容器完成动态部署和取消部署。展开垂直轨道和容器。取消部署垂直API。

 类似资料:
  • 我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }

  • 假设我有一个类似这样的竖线(有意简化以便于解释我的问题)。 现在想象一下,MyService是事件驱动的,当服务中发生某些事件时,我想停止顶点。 是否有人对Vert有更多经验。x知道如何做到这一点?或者,也许有人会给我一些建议,告诉我什么是正确的替代方法?

  • 我刚刚开始学习vert. x,对它是如何工作的仍然感兴趣...我在想: 当反应性非阻塞垂直线卸载到阻塞垂直线时,阻塞垂直线在工作线程上运行。 1.what事件循环线程,关闭加载的工作,在同一时间?从循环中获取另一个事件? 返回a结果时,同一事件循环是否继续执行?还是另一个? 1的答案是什么 我觉得我错过了一些基本的东西,关于事情实际上是如何工作的。谢谢你的帮助!

  • 我有下面的垂直类: 我的html文件是: 我使用了“StaticHandler.create…”以便为客户端文件夹中的所有静态文件提供服务。正如您所理解的,我希望一旦服务器收到对“localhost:3000/hello”的GET请求,客户端将获得一个HTML页面,该页面将调用app。js文件。 不幸的是,我做不到。指数html已加载,浏览器无法加载应用程序。js。 重要的是要注意该索引。html

  • 我面临着一个与垂直的问题。x、 当超时被触发时,它会生成一个响应,然后实际响应(需要10秒)出现并尝试进行响应,因此我得到: JAVAlang.IllegalStateException:已写入响应 我是Vert的新手。x和我不确定想要的行为,我应该怎么做?,由于代码是异步的,我找不到检查响应是否已经发送的方法。 有没有办法做到这一点? 我有以下代码:

  • 我想用一个用Kotlin编写并使用Vert的现有项目测试Quarkus和Docker的本机映像。x个竖线。 你能给我举一个关于如何使用Quarkus部署Verticle的例子吗? 我的依赖项是和。 我在Vert. x扩展测试中找到了一些例子,但是我找不到如何在服务器启动时部署我的Verticle。