在堆棧 溢出站點上,我們可以異步地看到以下更新。堆棧溢出如何異步顯示更新?
- 聲望改變
- 新問題,在問題清單
- 新評論添加添加等
按我的理解,它可以在XMLHttpRequest(XHR)請求來實現異步,也許在setInterval
的幫助下。
Confusionions:在Firefox中,沒有XHR請求即將到來,即使這樣我可以異步地看到上述更改。
這是什麼類型的實現以及如何在ASP.NET MVC中完成?
在堆棧 溢出站點上,我們可以異步地看到以下更新。堆棧溢出如何異步顯示更新?
按我的理解,它可以在XMLHttpRequest(XHR)請求來實現異步,也許在setInterval
的幫助下。
Confusionions:在Firefox中,沒有XHR請求即將到來,即使這樣我可以異步地看到上述更改。
這是什麼類型的實現以及如何在ASP.NET MVC中完成?
我最近回答了類似的問題: How do I display real-time information to the user?
正如Nathan Fisher
說,你要考慮的WebSockets和SignalR。
關於您沒有看到Firefox中的XHR請求,請嘗試查找Websockets。在Chrome中,我可以在每個SO頁面上看到一個WebSocket。
會注意到是處理信息的關於我的收件箱,我的名聲也當我在寫這個答案Nathan Fisher
做編輯自己的崗位,這樣我就可以看到頁面處理也(我看到「此郵件已被編輯」)。
這令人印象深刻和美麗的東西是使用Ajax從客戶端到服務器的異步調用。
一個非常簡單的方法是使用jQuery Ajax進行異步調用的setInterval內尋找一個問題的「更新」(這是ID 17779628.的問題,我們可以在URL = P見)。所以,對服務器的調用可以傳遞這個ID和最後一次對服務器進行調用的TimeStamp(日期)。服務器然後將從TimeStamp發生的更新帶到DateTime.Now
。
我不確定堆棧的真正實現 溢出,但我已經做了很多這樣的東西。
另一個提示:
有一個改進。 ;) 現代瀏覽器包含WebSocket的實現。由於套接字是「點對點」而不是「客戶端 - 服務器」,所以現代瀏覽器不需要setInterval方法。相反,您可以在JavaScript中實現WebSocket打開,然後服務器可以在發生更新(您可以使用包含事件的設計模式)時主動發送更新。
看看CanIUse看看哪些瀏覽器支持WebSocket。
編輯
反正,我只是打開了代碼爲您服務。堆棧 溢出的JavaScript代碼對於JavaScript代碼使用singleton設計模式。只需在瀏覽器控制檯中查看StackExchange
變量即可。這是JavaScript代碼的核心。正如你所看到的,整個API建立在這個StackExchange
變量上。現在,搜索StackExchange.realtime.init('sockets.ny.stackexchange.com:80');
然後,看看在StackExchange.realtime.init
在控制檯執行。看起來他們支持使用WebSocket進行異步更新。這是很好的和現代的,但只支持新的瀏覽器版本。如果您需要保持向後兼容性,則可以同時支持WebSocket(用於新建)和Ajax實現(用於舊瀏覽器)。
爲CanIUse網站+1。我已經忘記了這件事情:) –
sry,需要一段時間才能通過它。希望你明白。 –
不需要匆忙=)。看看[這裏](http://stackoverflow.com/questions/5052543/how-to-fire-ajax-request-periodically)樣本和[這裏](http://irfandurmus.com/projects/ jquery-periodic-updater /)爲一個插件,承諾減輕你的生活。 – Minduca
任何簡短的示例代碼,您可以分享嗎? –
用Visual Studio中的Nuget Package Manager試試這個: - Install-Package Microsoft.AspNet.SignalR.Sample –
也可以看看SignalR Github站點:https://github.com/SignalR/SignalR/tree/master/樣品 –