7 java comet long-polling websocket playframework
我正在使用play框架开发一个浏览器游戏,我肯定需要longpolling,但我不太明白如何使用它.WebSockets对于它来说是完美的,但它还没有得到那么多浏览器的支持.
这就是我想要做的事情:当用户登录并导航到游戏控制器时,我想开始连接并保持打开状态.我想为所有在线用户执行此操作,因此我可以在网站上显示这些用户的列表,以便他们可以互相玩耍.我查看了文档,但我不明白如何在我的情况下实现它.因为根本没有我想要计算的东西(在示例中他们正在生成pdf)我只想让连接保持打开状态.
我还想知道的是,我应该如何跟踪所有这些开放的连接?现在,我online在数据库的users表中只有一个列,我更新了.每次有人连接时我都要更新数据库.有没有更好的方法来做到这一点,还是这样好吗?
最后,假设以上所有工作.当玩家A选择玩家B玩时:如何通知玩家B?我只是发送一些JSON代码,并在播放器B的一侧用javascript更改页面,还是将他发送到一个完全不同的页面?当两个连接建立并且游戏已经开始时,我不确定如何通信.
首先,我认为您需要了解Websockets和Long Polling之间的区别.
Websockets创建一个连接并保持打开,直到浏览器终止会话,通过一些javascript或用户从页面移动.这将为您提供所需要的性质.查看Play下载中的聊天示例将向您展示如何使用Websockets处理整个聊天应用程序.继Pere关于Play的无国籍状态的答案.Play创建者建议单个Websocket连接,无论打开多长时间以及返回多少请求,都被认为是单个事务.因此,不需要在每个Websocket请求之间保存到数据库(同样,您可以看到Chat示例中没有保存任何内容).使用此方法,您可能希望在Websocket最终关闭时保存详细信息,或者确实是所有Websockets,具体取决于您的用例.
另一方面,Long Polling打开与服务器的连接,服务器只是等待有东西发送回客户端.如果您需要将任何数据推送到服务器,您可以将其作为单独的AJAX请求执行,因此您可以有效地同时打开两个请求.您不一定知道用户何时注销,除非您在离开页面时发送请求,让服务器知道他们已经离开,但这并不总是成功.长轮询可以工作,但它不像Websockets那样整洁,但正如你所说,这还没有被广泛支持.
我的建议是研究聊天示例(因为它有一个长轮询和Websockets版本).这将是启动和运行您的要求的最有效方法.
关于如何通知其他玩家的最终查询.在Long Polling中,您只需使用一些JSON响应挂起的请求.使用websockets,您可以将事件发送回客户端.同样,这两种方法都可以从Chat示例中清楚地看出来.
我还在Websockets上写了一篇博文,可以帮助您更好地理解这个过程.
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |