2

我正在查看必须在以下约束下工作的 Javascript 小部件:

  1. 小部件向第 3 方服务器发出请求以及回调 URL
  2. 3rd 方服务器在任意时间后 ping 回调 URL,这应该触发一个在小部件内运行的方法

这是小部件的实现方式:

  1. 服务器 A 已设置完毕。该小部件将 GUID 参数附加到指向服务器 A 的静态 URL。
  2. 小部件将此 URL(带有 GUID 参数)发送到第 3 方服务器。
  3. 服务器 X 只是侦听来自第 3 方服务器的请求,并将每个请求的 GUID 参数存储在数据库中。
  4. 该小部件每 X 秒轮询一次服务器 A,以查看第 3 方服务器是否使用其 GUID 发送了回调。
  5. 如果服务器返回 OK 响应,则小部件将运行所需的方法。

似乎是一个相当粗略的实现。没有更简单的方法可以做到这一点吗?

我想探索:

a) 是否可以避免重复从小部件轮询服务器?可以设置保持连接吗?小部件可以订阅服务器事件吗?我查看了允许服务器向浏览器发送推送通知的服务器发送事件 API。但这与 IE 尚不兼容。

b) 是否可以完全避免设置后端?WebSockets 浮现在脑海,但我对细节模糊不清,兼容性问题会使它们不受欢迎。

谢谢。

4

1 回答 1

4

服务器消息和 WebSocket 是您的两个答案。可悲的是,两者都不是无处不在,所以你不能使用任何一个的普通实现,并期望得到完全的支持。

有一些解决方案(不幸的是,有几个付费的),它们在两端都提供 WebSocket 功能,并回退到 Flash 或长轮询。

Pusher 是一个立即浮现在脑海中的库。无论后端是什么,Pusher 都有多种实现,客户端将默认使用 websockets,但如果可能,将恢复为 Flash 的数据传输格式。他们还有一个 REST API。

这一切都取决于你想要支持的人。最后,我什至不知道您是否想为 IE6/7 用户提供完整的实时体验,即使您可以... ...因为解决方法(即:持续轮询)最坏的情况也是性能最慢的,然后最慢的浏览器将被卡住。

于 2012-09-15T04:12:23.000 回答