我使用Rails创建了一个在线多人游戏棋盘游戏,我希望游戏能够在无需手动刷新页面的情况下进行播放。我打算使用websockets或Server Sent Events来更新页面。我还没有确定,但我不认为它会对我的问题产生影响。如何在Rails中触发实时客户端更新
我很困惑的事情是知道什么时候发送更新到客户端。例如,假设我正在下棋,并且player1轮到了。他们会发送他们的移动到服务器,服务器然后将其保存到数据库。 player2的websocket或SSE如何知道将player1移动到player2的浏览器的信息?
我知道他们可以定期查询数据库以查看游戏是否已更新,但由于每个用户都经常查询数据库,因此似乎难以扩展。
是否有一种简单的方法来等待数据库的更新并以某种方式自动通知它?还是有其他解决方案?
我已经在网上看了一大堆解决方案,但还没有真正得到任何具体的想法。只要是免费的,我绝对愿意使用图书馆或其他方式解决问题。我见过一些付费解决方案,但这些都不是一种选择。
我还看到有人建议以某种方式使用node.js与rails一起实时地执行某些操作。我对node.js了解不多,但我听说它对于这种异步功能非常有用。如果它比任何rails解决方案都好,我会对如何使用它感兴趣。
我使用的是Rails 3.2,但是如果Rails 4在这里能够很好地工作,我可能会对此感兴趣。
FAYE似乎使用长轮询或服务器发送的事件。是否有可能使用双向通信,如websockets?因此,您不需要为每个移动单独提供http请求,而是使用相同的websocket来提交所有移动操作? – bdwain 2013-05-13 18:12:11
我的意思是使用相同的websocket来提交你所有的动作,并从游戏频道接收更新 – bdwain 2013-05-13 21:19:50
是的,客户端连接到FAYE服务器,可以发送消息到服务器或从服务器订阅(接收)事件。 – AndyD 2013-05-13 21:49:02