2010-06-10 158 views
2

我只是想知道是否有辦法讓服務器將信息推送到JavaScript函數。基本上,我有一個Dashboard-type頁面,它具有一個javaScript函數來從服務器獲取更新並更新儀表板。將通知推送到JavaScript?

我想讓我的服務器能夠「ping」JS。

我甚至不知道如何可能(我猜Twitter和Facebook使用投票?),但我想我問。

我聽說Comet,但我不知道這是否適用於普通的標準IIS 7安裝? (如果有任何問題,這是SharePoint 2010站點)如果我理解正確,Comet本質上是一個不斷開放的連接,所以它看起來實際上與我想要的相反(減少請求數並因此加載)

+2

HTML5 [WebSockets的(http://www.webkrunk.com/2010/04/30/html5-web-sockets-example/)具有從服務器真正的推送支持,但使用您可能必須在應用程序支持的瀏覽器上做出犧牲,並添加WS的服務器端實現。 – Anurag 2010-06-10 06:42:42

+0

謝謝。我實際上可能會考慮這一點,因爲我主要負責瀏覽器,只有IE8可能會成爲問題,但他們可能會回到輪詢或手動刷新。 – 2010-06-10 07:31:40

回答

1

您將需要一個開放式連接來將數據從服務器「推」到客戶端。因此,即使您使用Flash之類的插件來打開支持雙向通信的套接字連接,您也可以打開套接字連接。

您的陳述「減少#個請求並因此加載」確實存在問題。您將請求的數量與負載相等,並且不準確。彗星大部分請求都在等待數據。因此,你可以有很多的請求,但是服務器上的負載非常低 - 除了來自工作線程池的等待線程之外,很少使用資源。

使用彗星。很好的工作,很容易實現,並且完全符合你的需求。

2

使用HTTP無法真正從服務器啓動連接。彗星實際上不是一種單一的技術,而是一組不同的解決方法(其中許多是在您鏈接的文章中描述的)。

有關使用IIS的Comet技術的信息,請參閱前面的問題Comet Programming in IIS。其中討論的一個程序是WebSync。

1

你必須以相反的方式做到這一點,讓客戶端用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秒鐘並再次輪詢服務器

2

彗星式的解決方法是獲得此功能的最常見方法。連接並不總是打開,而是每隔x秒調用一次,然後在超時後重試。超時實質上意味着服務器在投票期間沒有任何東西要提供給客戶端。您會看到Etherpad代碼使用了相同的方法,該方法已集成到Google Docs和Wave等其他Google產品中。

+0

謝謝,我會看看Etherpad的來源。 – 2010-06-10 07:32:21

3

如果您正在尋找適用於IIS的彗星服務器,請查看WebSync;這正是:)

2

正如Samuel Neff所說,「你將需要一個開放的連接來將數據從服務器」推「到客戶端。「

您可以使用一個服務像pubnub打開從客戶端和支持回退持久連接舊版本瀏覽器。

我做了一個小的演示給你看這個應用程序的前端可以如何工作。該演示顯示PubNub延遲隨時間。源是可用的here

PubNub Latency Demo

瀏覽器所預訂信道,並觸發在接收到消息時,回調。

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