【问题标题】:Pushing notifications to a JavaScript?将通知推送到 JavaScript?
【发布时间】:2011-03-02 00:20:25
【问题描述】:

我只是想知道是否有办法让服务器将信息推送到 JavaScript 函数。本质上,我有一个仪表板类型的页面,它有一个 javaScript 函数来从服务器获取更新并更新仪表板。

我希望我的服务器能够“ping” JS。

我什至不知道这怎么可能(我猜 Twitter 和 Facebook 使用投票?),但我想我会问。

我听说过Comet,但我不知道这是否适用于普通的标准 IIS 7 安装? (它是一个 SharePoint 2010 网站,如果这有任何影响)如果我理解正确的话,Comet 本质上是一个持续打开的连接,所以它看起来实际上与我想要的相反(减少请求数,因此减少负载)

【问题讨论】:

  • 谢谢。我实际上可能会考虑这一点,因为我主要负责浏览器,只有 IE8 可能是一个问题,但它们可能会退回到轮询或手动刷新。

标签: javascript http iis-7 comet push-notification


【解决方案1】:

正如 Samuel Neff 所说,“您将需要一个开放连接来将数据从服务器“推送”到客户端。”

您可以使用pubnub 之类的服务从客户端打开持久连接并支持旧浏览器的回退。

我做了一个小演示,向您展示这个应用程序的前端是如何工作的。该演示显示了 PubNub 随时间的延迟。来源是here

浏览器订阅频道并在收到消息时触发回调。

 pubnub.subscribe({
     channel: 'my_channel',
     message: function(m){console.log(m)}
 });

在演示中,客户端还发布消息。在您的情况下,您将包括PubNub IIS library

pubnub.Subscribe<string>(channel="mychannel", DisplaySubscribeReturnMessage,    DisplaySubscribeConnectStatusMessage, DisplayErrorMessage);
// NOTE: DisplaySubscribeReturnMessage, DisplaySubscribeConnectStatusMessage and DisplayErrorMessage are callback methods

【讨论】:

    【解决方案2】:

    如果您正在为 IIS 寻找彗星服务器,请查看WebSync;就是这样:)

    【讨论】:

      【解决方案3】:

      您将需要一个开放连接来将数据从服务器“推送”到客户端。因此,即使您使用 Flash 之类的插件打开支持双向通信的套接字连接,您也有一个打开的套接字连接。

      您的“减少请求数并因此减少负载”的说法确实有问题。您将请求数量与负载相等,这是不准确的。使用 Comet,大多数请求都在等待数据。因此,您可以有非常多的请求,但服务器上的负载实际上非常低 - 除了工作线程池中的等待线程之外,它几乎不使用资源。

      使用彗星。效果很好,易于实施,完全符合您的需要。

      【讨论】:

        【解决方案4】:

        Comet 风格的解决方法是获得此功能的最常用方法。连接不是一直打开的,而是限制为每 x 秒进行一次调用,然后在超时时重试。超时本质上意味着服务器在轮询期间没有任何东西可以提供给客户端。您会看到 Etherpad 代码使用了相同的方法,该方法现在已集成到其他 Google 产品中,例如 Google Docs 和 Wave。

        【讨论】:

        • 谢谢,我去看看 Etherpad 的源码。
        【解决方案5】:

        你必须反过来做,让客户端用 JS “ping”服务器。

        你可以这样做:

        function pollServer()
            {
            // Get some parameter
            var param = .......
            AJAXCall("page.php?param="+param, onReturn);
            }
        
        function onReturn(response)
            {
            // do something with response
            setTimeout("pollServer()", 5000);
            }
        
        pollServer();
        

        AJAXCall 是用于执行 AJAX 调用的函数,当它得到响应时会调用 onReturn。 一旦得到响应,在这种情况下它会等待 5 秒并再次轮询服务器

        【讨论】:

          【解决方案6】:

          使用 HTTP 无法真正从服务器发起连接。 Comet 并不是真正的单一技术,而是一组不同的解决方法(其中许多在您链接的文章中进行了描述)。

          有关使用 IIS 的 Comet 技术的信息,请参阅前面的问题 Comet Programming in IIS。那里讨论的程序之一是 WebSync。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-09-18
            • 2015-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-17
            • 2018-03-22
            相关资源
            最近更新 更多