如何实现由第三方服务器触发的JavaScript方法?

时间:2012-09-15 02:52:34

标签: javascript ajax http events web-applications

我正在查看必须在以下限制条件下工作的Javascript小部件:

  1. 小部件向第三方服务器发出请求以及回调网址
  2. 第三方服务器在任意时间后ping回调URL,这应触发在窗口小部件中运行的方法
  3. 这是小部件的实现方式:

    1. 已设置服务器A.窗口小部件将GUID参数附加到指向服务器A的静态URL。
    2. 窗口小部件将此URL(带有GUID参数)发送到第三方服务器。
    3. 服务器X只是侦听来自第三方服务器的请求,并将每个请求的GUID参数存储在数据库中。
    4. 小部件每隔X秒轮询服务器A,以查看第三方服务器是否使用其GUID发送回调。
    5. 如果服务器返回OK响应,则窗口小部件将运行所需的方法。
    6. 似乎是一个相当粗略的实现。难道没有更简单的方法吗?

      我想探索:

      a)是否可以避免重复从小部件轮询服务器?可以设置保持连接吗?小部件可以订阅服务器事件吗?我查看了Server-sent events API,它允许服务器将浏览通知发送到浏览器。但这还不能与IE兼容。

      b)是否可以避免完全设置后端?我想到了WebSockets,但我对细节感到朦胧,兼容性问题会使它们变得不受欢迎。

      感谢。

1 个答案:

答案 0 :(得分:4)

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

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

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

这一切都取决于你想要支持的人。 最后,我甚至不知道你想给IE6 / 7用户提供全面的实时体验,即使你可以...... ...因为最坏情况下的变通方法(即:常量轮询)也是性能最慢的,最慢的浏览器会被卡住使用。