網站上能實時通知的私信功能應該怎麼實現?

譬如知乎私信,不需要用戶刷新界面,就有通知提示。

開發環境:vs2013,http://asp.net。


必要條件: 伺服器通知瀏覽器當前用戶有新消息。那麼伺服器如何通知瀏覽器呢?

WebSocket,這是目前效率最高,實時性和解決方案最好的。因為它就是設計來實現這類實時需求的。如在線遊戲,聊天。

Server sent event,能實現知乎的消息,只不過跟WebSocket相比,它是單向的。就是伺服器向瀏覽器的單向傳輸。特別適合知乎這種提醒有新消息,不需要跟伺服器交互的場景。

輪詢,如果能用前面兩種方法,就不要使用此方法。不過如果要兼容IE6這種老掉牙的瀏覽器,那就沒辦法。只能每隔一段小間隔,用AJAX方式去伺服器查詢一下。以前的Web QQ就是這種方式。

當然還有其他做法,不常用或者已被淘汰,就不說明了。


1,Web Notification 跟服務端一點關係都沒有,只是讓瀏覽器可以彈桌面提示框

2,以前的Web QQ不是輪詢!!!而是Comet技術,或者叫 長連接的技術。就是使用HTTP長連接達到實時通信的技術。

回答題主的問題,可以使用以下技術達到即時通訊的效果:

1,Web Socket。條件:支持H5 Web socket的瀏覽器。

2,EventSource 使用MIME類型 text/event-stream來實現

3,Flash socket。條件:在網站上嵌入一個無界面的flash。

4,Comet(HTTP長連接)。條件:無,可以使用WEB服務端

5,Forever Frame。條件:在網頁上嵌入一個iframe,並使用HTTP中的keep alive來實現

6,輪詢 頻繁發送請求,查詢消息

signalr是以上部分技術(1,2,5,6)的實現,並根據一定條件選擇性使用。


1.websocket 最佳!但是不兼容老版本IE。

2. .net 平台可以嘗試 http://asp.net SignalR,支持websocket瀏覽器使用websocket,不支持的會轉為長輪詢。


他們都給你講了堆大道理,其實除了道理也沒什麼能告訴你的了


題主是asp的環境啊,要是java流的話,這個開源項目不錯 https://github.com/Atmosphere/atmosphere 網頁自適應 Web Socket 、長連接,其它端也有支持,可以看看。封裝的很傻瓜,代碼下例子很多,中小站點做聊天,信息推送足夠了。


在net平台下微軟提供了一套解決方案 signalr


推薦閱讀:

有沒有可能讓jQuery正確解釋JSON中的Date對象?
ASP.NET 5 和 ASP.NET MVC 6 是什麼關係,是不是要分裂了,是一伙人在弄嗎?
ASP.NET高級教程中為什麼側重的是各種控制項的使用,而不是代碼部分?

TAG:即時通訊IM | ASPNET |