2009-06-23 61 views
0

什么要完成的是: 我想“同步Web浏览器”。我的网站有一个“等待URL”,当浏览器到达那里时,它会一直等到另一个浏览器也去那里,然后两个人都会看到一个类似测验的游戏。导轨:如何检测其他客户端浏览相同的URL

眼下等待URL将调用每一秒到Rails检查是否有其他球员来比赛。 Rails框架如何检测连接到相同URL的不同客户端?

由于控制器的每个请求重新貌似不大的地方,而不是肯定的视图和模型存储,这看起来确实笨拙。

此外,配对后,我需要这样莫名其妙的信息必须保留

回答

4

你要做的是在用户之间共享信息。所以数据库或memcached是最明智的。

最简单的:我想创建一个ActiveRecord对象,或许所谓的测验,它们的实例人加入凭借去一个URL,例如使用默认路由:

http://yoursite.com/quizes/join/3434 

你会需要一个AJAX轮询轮询者通知其他人;使用periodically_call_remote - 你可以在默认情况下使用render:nothing => true,如果出现错误以保持效率,则渲染其他内容。您还可以使用频率方法作为判断人们是否也离开测验的基础(例如,如果频率为1秒,那么假设有人在5-10秒之后没有进行测试就离开了)。

0

我不是一个轨道专家检查和比较配对用户的每一个答案,但因为所有的状态驻留在你的数据库将是保存这些信息的地方。

你可以保持“等待用户”表,并在“等待URL”视图检查,如果用户已经在表中。如果不是,请将他添加到表格中。然后,检查是否有另一个用户在等待(也许有多个用户?),如果是,请将它们匹配并从表格中删除它们。

另一个改进是为每个用户在“等待用户”表中保留一个时间戳,并在视图中进行更新 - 这将作为保持活动状态,使您能够检测到“离开”等待的用户网址“页面或关闭浏览器。

1

假设这些用户不与该网站注册,所以不要有某种类型的用户ID,你可以储存我会使用会话建议。它是一个用户数据存储。默认情况下,会话存储在用户计算机上的加密cookie中。但是,您可以使用ActiveRecord作为会话存储,并可以直接查询该表?

将URL存储在会话中,稍后再进行搜索。您通常只能使用Rails的会话哈希访问当前用户会话,但如果您创建了一个名为Session的模型(或者可能是更类似于'WaitingGamers'的模型),那么它可能会(未测试)使用会话表,您可以查找信息需要。

使用ActiveRecord作为会话存储会话数据存储为一个序列化的哈希值时,我猜。使用Marshall将其重新转换为常规散列并查找您存储在那里的数据。