在线游戏中玩框架longpolling

7 java comet long-polling websocket playframework

我正在使用play框架开发一个浏览器游戏,我肯定需要longpolling,但我不太明白如何使用它.WebSockets对于它来说是完美的,但它还没有得到那么多浏览器的支持.

这就是我想要做的事情:当用户登录并导航到游戏控制器时,我想开始连接并保持打开状态.我想为所有在线用户执行此操作,因此我可以在网站上显示这些用户的列表,以便他们可以互相玩耍.我查看了文档,但我不明白如何在我的情况下实现它.因为根本没有我想要计算的东西(在示例中他们正在生成pdf)我只想让连接保持打开状态.

我还想知道的是,我应该如何跟踪所有这些开放的连接?现在,我online在数据库的users表中只有一个列,我更新了.每次有人连接时我都要更新数据库.有没有更好的方法来做到这一点,还是这样好吗?

最后,假设以上所有工作.当玩家A选择玩家B玩时:如何通知玩家B?我只是发送一些JSON代码,并在播放器B的一侧用javascript更改页面,还是将他发送到一个完全不同的页面?当两个连接建立并且游戏已经开始时,我不确定如何通信.

Cod*_*nci 7

首先,我认为您需要了解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上写了一篇博文,可以帮助您更好地理解这个过程.

  • wordsquared.com使用[Pusher](http://pusher.com)(我为谁工作).我们在不支持WebSockets的浏览器中使用WebSockets和回退到Flash套接字.由于99%的浏览器支持Flash(根据adobe),我们认为此解决方案使WebSockets生产准备就绪 - 许多StackOverflow都同意(请参阅WebSocket就绪[此处](http://stackoverflow.com/questions/6434088/why-心不是-炉腹-更受欢迎,尤其是-AS-AN-替代到的WebSockets和 - 长)).我们还为聊天室式的"谁在线"功能添加了内置[在线功能](http://bit.ly/pq56EB). (2认同)