6

我想创建一个像 Facebook 这样的推送通知系统。每当 Facebook 想要告诉你一些事情(比如有人对帖子发表评论、给你加了标签等)时,你会在屏幕的左下角看到一个小通知。它淡入淡出。

如何使用 jQuery 和 Rails 构建这样的系统?它是如何工作的?JS 是不是不断地询问服务器,“有新的通知吗?” 或者服务器是否以某种方式送到该服务。

现在,如果一个用户向另一个用户发送消息(例如),我可以向用户的队列添加一条通知,说“你有一条新消息”,但它不会出现,直到页面重新加载......

4

3 回答 3

6

Juggernaut看起来很酷,我很久以前就看到它演示过,现在它是在 node.js 之上重写的。好的。你必须安装 redis 和 node.js 并运行 node.js 服务器,剩下的就很简单了。

Pusherapp.com 看起来也很酷,它是付费的,但至少您不必安装和运行额外的服务(以及守护、扩展它们,...)。

但是,如果负载不是太大,我宁愿保持简单,只使用 javascript 进行轮询。你可以很容易地编写自己的(这不是太难),但是已经有一些非常好的插件用于 jquery。例如PeriodicalUpdater

于 2011-01-20T11:06:29.583 回答
4

目前,此类问题可以通过使用 Comet 来解决。

更多信息,http://en.wikipedia.org/wiki/Comet_(programming)

基本上浏览器使用 HTTP 这是一个无状态协议,因为它只在请求然后响应的方式中起作用,我们永远无法真正获得真正的推送通知。当想要推送到浏览器时,我们必须以某种方式模仿类似 TCP/Socket 的连接来推送到它。Comet 只是一个用于定义此类技术的术语。

有许多图书馆对此有所帮助。例如:- Orbited,Juggernaut on rails。

对于新的浏览器,有一种称为 Websockets 协议的东西,我提到的库也利用了这一点。这是一个很大的话题,但我很确定,你会找到一些关于 Juggernaut 和 Rails 的基本示例。

还有http://pusherapp.com,它做同样的事情但收费。

于 2011-01-20T09:07:33.410 回答
2

许多网站实现此类功能的另一种方式是 bosh,或同步 http 上的双向流:

http://en.wikipedia.org/wiki/BOSH

下面是几个 JavaScript 库之一:

http://code.stanziq.com/strophe/

这种类型的设置需要在后端有一个 xmpp/bosh 服务器,但基本上浏览器保持连接打开(非常类似于彗星),并且随着消息进入浏览器处理它们。

这种技术可用于通知、聊天以及您想要实时发生的任何事情。

于 2011-01-20T16:39:22.870 回答