Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将通知推送到JavaScript?_Javascript_Http_Iis 7_Comet_Push Notification - Fatal编程技术网

将通知推送到JavaScript?

将通知推送到JavaScript?,javascript,http,iis-7,comet,push-notification,Javascript,Http,Iis 7,Comet,Push Notification,我只是想知道是否有一种方法可以让服务器将信息推送到JavaScript函数。本质上,我有一个仪表板类型的页面,它有一个javaScript函数,用于从服务器获取更新并更新仪表板 我希望我的服务器能够“ping”JS 我甚至不知道这怎么可能(我猜Twitter和Facebook使用的是民意调查?),但我想我会问 我听说过,但我不知道这是否适用于普通的标准IIS7安装?(这是一个SharePoint 2010网站,如果我没有弄错的话)如果我理解正确的话,Comet本质上是一个持续打开的连接,因此它看

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

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

我甚至不知道这怎么可能(我猜Twitter和Facebook使用的是民意调查?),但我想我会问


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

使用HTTP从服务器真正启动连接是不可能的。Comet实际上不是一种单一的技术,而是一组不同的解决方法(其中许多方法在您链接的文章中有描述)


有关使用IIS的Comet技术的信息,请参阅前面的问题。这里讨论的其中一个程序是WebSync。

你必须用另一种方法,让客户端用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秒钟,然后再次轮询服务器

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

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

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


使用Comet。非常好用,易于实现,并且完全满足您的需要。

如果您正在寻找用于IIS的comet服务器,请查看;正是这样:)

正如塞缪尔·内夫(Samuel Neff)所说,“您需要一个开放的连接来将数据从服务器“推送”到客户端。”

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

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

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

 pubnub.subscribe({
     channel: 'my_channel',
     message: function(m){console.log(m)}
 });
在演示中,客户端还发布消息。在您的情况下,您将包括

publinub.Subscribe(channel=“mychannel”,DisplaySubscribeReturnMessage,displaysubscriberconnectstatusmessage,displayrormessage);
//注意:DisplaySubscribeReturnMessage、DisplaySubscribeConnectionStatusMessage和DisplayErrorMessage是回调方法

HTML5支持从服务器进行真正的推送,但要使用它,您可能需要在应用程序支持的浏览器上做出牺牲,并添加WS.Thank的服务器端实现。实际上,我可能会看到,因为我主要负责浏览器,只有IE8可能是一个问题,但它们可能会退回到轮询或手动刷新。谢谢,我将查看Etherpad的源代码。
pubnub.Subscribe<string>(channel="mychannel", DisplaySubscribeReturnMessage,    DisplaySubscribeConnectStatusMessage, DisplayErrorMessage);
// NOTE: DisplaySubscribeReturnMessage, DisplaySubscribeConnectStatusMessage and DisplayErrorMessage are callback methods