2010-08-23 44 views
5

我正在使用服務器端變量進行應用程序,每秒更改一次。每一秒,這些新變量都需要在所有打開網頁的客戶端上顯示。ASP.NET - Comet將消息從服​​務器推送到所有客戶端

現在大多數人告訴我,彗星去,因爲我需要推/拉數據每一秒,現在我有幾個問題:

  • 什麼會是一個更好的解決方案看事實上,我需要新的數據每秒,從客戶端拉或推動服務器?

  • 此外,服務器端的項目標識符(使用該標識符獲取的變量)可以更改,當客戶端刷新頁面時,他需要獲取最早的(和生存的)標識符。這意味着我在客戶端的jquery/javascript必須知道他在頁面上獲得了哪個ID,那麼執行此操作的最佳方法是什麼?

  • 最後一件事是我找不到一個好的(而不是昂貴的)彗星庫/ api的asp.net(C#)。任何人都曾使用過彗星圖書館,效果很好?我們正在尋找一個每時每刻都應該有2000個彗星連接的網站。

回答

2

什麼會是一個更好的解決方案 看事實,我需要的 新的數據每一秒,從 拉客戶端或服務器推?

我認爲這並不重要,因爲請求和新數據可用的時間相當短。我會在前一個成功後在客戶端實例化一個新的XMLHttpRequest。您可以向服務器發送最後收到的數據(如果不是太大),以便可以將該數據與服務器上可用的當前數據進行比較,並且只在新數據可用時才發回。

而且該項目的ID是在 服務器端(與變量的那 ID GOT)可以改變,當客戶端 刷新頁面,他需要得到 最古老的(生活)的ID。這會 的意思是我的客戶端的我的jQuery/JavaScript的 必須知道他在網頁上得到哪個ID ,什麼是 做到這一點的最佳途徑?

我不完全相信我理解你的意思,但如果我是對的,你可以將每個名稱/值對存儲在一個對象中。當新變量到達客戶端時,它不會覆蓋現有數據;當某個變量已經存在時,它會用最新值更新。它可能看起來像:

{ first_variable: 345, 
    second_one: "foo", 
    and_the_third: ["I", "am", "an", "array,", "hooray!"] 
} 

而當second_one一個新的狀態到達時,如"bar",對象更新爲:

{ first_variable: 345, 
    second_one: "bar", 
    and_the_third: ["I", "am", "an", "array,", "hooray!"] 
} 

最後一件事是,我不能找到一個很好的 (不貴)彗星庫/ API 的asp.net(C#)。任何人都曾使用過一個 彗星庫,效果很好?

我沒有任何與ASP.NET的經驗,但你需要這樣一個庫嗎?你能不能自己編寫服務器端代碼,正如我所說的那樣,將連接保持打開並定期(不斷地)將當前狀態與先前發送的狀態進行比較?


UPDATE:要顯示它並不難保持連接在服務器端開放,我會告訴你一個長輪詢模擬我在PHP中寫道:

<?php 
    sleep(5); 
?> 
<b>OK!</b> 

相反讓過程sleep幾秒鐘,您可以輕鬆測試循環中狀態的變化。而不是發送任意的HTML元素,你可以發回數據,例如在JSON表示法中。我無法想象在ASP.NET/C#中這很難做到這一點。

+0

我確實在你提到的最後一件事情上找到了一些很好的教程,保持連接打開並接收發送http請求。現在的問題是,我不知道如果我自己編寫每一部分,它會變得多快。 無論如何,我今天晚些時候會嘗試它,但可能需要很長時間。 另外我有4個標準div的應該得到一個ID時,頁面加載。在此之後,它每隔一秒更新一次,它會查看div的ID並將正確的值放在那裏。這很像你現在看到更多的一分錢拍賣。無論如何感謝您的迴應!希望更多的人做出反應。 – Julian 2010-08-23 12:57:59

+0

@Julian - 我還不確定我是否正確理解你。在JavaScript中操作DOM非常容易。如有必要,您可以隨時提出新問題,但SO上已存在許多問題。我不參加我們國家的一分錢拍賣。 ;) – 2010-08-23 13:13:46

+0

是的,也許這只是我。我通常是C#winform開發人員,但還沒有真正進入html/javascript的東西。但是我們需要構建的應用程序不像一分錢拍賣,但您可以每秒都想到同樣的更新。 – Julian 2010-08-23 13:22:14

3

WebSync作者:Frozen Mountain是一個全面的可擴展彗星IIS和ASP.NET服務器。它無縫集成到您的應用程序堆棧中,以支持每個服務器節點與數千個客戶端進行實時數據通信。

檢查一下,有一個社區版免費提供。

5

PokeIn ASP.NET ajax庫中有一個SendToAll函數。

+0

雖然庫本身相當昂貴。 – arviman 2012-03-08 21:59:21

相關問題