我正在尝试为Vert.x开发一个概念验证-一个简单的实时浏览器游戏。
让我们想象一个类似于在线扑克的游戏-您拥有一个大厅,其中有许多现有的游戏可供加入。您还可以创建一个新游戏(因此该大厅中的游戏数量是可变的)。 在前面,您有一个异步http服务器(群集),玩家连接到该服务器。 特别是在特定游戏中,一切都是实时的,因此当玩家执行某些操作时,其他人会立即看到它,而无需刷新或定期ajax轮询。
我在思考如何将这个功能分解成verticles。我的第一个想法是创建一个verticle来处理http连接(并设置http服务器将选定的事件公开到事件总线以供http客户端使用),另一个verticle来表示游戏大厅,第三个verticle来表示实际游戏。 大厅和游戏verticles只会知道事件总线,它们不会处理http。
唯一不清楚的是这些verticles的范围,特别是游戏verticle,因为会有更多(动态数量的)游戏。 默认情况下,您部署特定verticle实例的固定数量(在简单应用程序中,通常只有一个)。在这种情况下,这个verticle将必须监听事件总线上的游戏事件,决定该事件属于哪个游戏,反序列化游戏状态,更改它,将其序列化并重新存储。然后通知所有连接的玩家。
相反,我想做的是每个游戏实例都有一个verticle,这是我的想象方式是否正确?如果是,最好的方法是什么?特别是动态创建和销毁verticle实例以及将一些信息(ID等)传递给新创建的verticle的部分如何实现?
附加问题-如何限制玩家只能听取来自他所属的游戏的事件(并发送)呢?使他不会影响其他游戏。 基本上与传统Java Servlet / EE应用程序中的会话/访问管理类似。