我試圖在網上實現一個自定義的實時聊天程序,但我不知道如何處理用戶的實時(或接近實時)更新。每隔一秒鐘左右從客戶端發送Ajax請求,輪詢數據庫以獲取新評論會更有意義嗎?是否輪詢在網上進行實時聊天的方式?
是否有某種方式從數據庫中每次添加註釋時間播出呢?如果這是可能的,那將如何工作?我使用Sql Server 2008和Asp.net(c#)。
謝謝!
我試圖在網上實現一個自定義的實時聊天程序,但我不知道如何處理用戶的實時(或接近實時)更新。每隔一秒鐘左右從客戶端發送Ajax請求,輪詢數據庫以獲取新評論會更有意義嗎?是否輪詢在網上進行實時聊天的方式?
是否有某種方式從數據庫中每次添加註釋時間播出呢?如果這是可能的,那將如何工作?我使用Sql Server 2008和Asp.net(c#)。
謝謝!
使用長輪詢/服務器端推/彗星:
http://en.wikipedia.org/wiki/Comet_(programming))
另見: http://en.wikipedia.org/wiki/Push_technology
我認爲當你使用長輪詢你也希望你的Web服務器以請求的非阻塞io形式提供一些支持,這樣您就不會爲每個連接持有線程。
沒有。使用像RabiitMq或ActiveMQ的排隊系統。也檢查mongoDB。
排隊系統會給你一個發佈 - 訂閱設施。
這個沒有任何意義。 Web瀏覽器如何直接將消息發佈到遠程消息隊列? –
如果你願意,你甚至可以用javascript來做到這一點。 ActiveMQ有一個JavaScript庫。 –
你可以讓每個客戶端輪詢服務器,在服務器端保持無響應的問題打開連接。
一旦有在服務器側檢測到消息,通過已經打開的連接返回該數據。收到後,您的客戶立即發出新的請求。
有一些複雜,因爲你需要保持它的連接與該會話相關的跟蹤服務器端,並應在作出迴應,以防止超時。
我從來沒有這樣做過,但這應該是最節約資源的方式。
Yarrr matey!它是[長期投票](http://stackoverflow.com/questions/tagged/long-polling),你壞血病的狗正在尋找。 –
@ChrisShouts:啊,所以這叫做長輪詢。今天學到了一些東西。 – 2011-10-19 18:22:53
[Comet implementation for ASP.NET?](http://stackoverflow.com/questions/65673/comet-implementation-for-asp-net) – RedFilter