原來現在很多人都用SignalR來實現Chat Room


今天從一個業余開發的群里,看到有人要求這樣一個項目需求:

1,)學員可以通過在線課堂找到自己喜歡的老師和課程。

2,)每個人可以建立自己課堂,每個課堂扣分多個子房間,交流群。設置管理員;有錄音功能,可以送鮮花,表情。

3,)可以直接從收藏的課程里看到該課程有多少學員在線。

4,)加好友,邀請好友功能。

5,)開課前30分鍾,20分鍾,10分鍾,5分鍾系統自動通知提醒學員進入課堂學習。

6,)老師與學員實時在線互動,交流,支持音樂伴湊,PPT等教學文檔,超大教室容量。

  看了這個后,就想這個需求用什么技術能實現,前段時間接觸到Socket,感覺Socket能可以實現通過Tcp給客戶端發送消息的功能,可這個需求很明顯就是一個B/S需求,使用Socket的可能性就不大了,難道說要在客戶端使用javascript輪詢服務器端,從數據庫中查詢數據,設置心跳為1s,這樣似乎也能達到實時的效果,但感覺很不正宗,知道html5開始支持實時獲取服務器端推送信息,實現實時更新功能,但前段時間又聽說了微軟有了一個SingalR,但以前弄不明白什么是SingalR,就像弄不明白什么是Owin一樣。

  不過,幸運的是------擺渡了下chat room,才知道原來SingalR原來可以實現Chat Room的工能。

  • 什么是SingalR?

  那么,什么是SingalR?

  ASP.NET SingalR是一個類庫,為開發者簡化了向程序添加實時Web功能的過程。實時Web功能使得服務端代碼推送內容到連接客戶端成為了可能,取代了服務器端不得不等待客戶端發送請求新的數據。

      SingalR可以用來添加任何形式的“實時”功能到你的ASP.NET Web應用程序。而聊天經常被用作一個例子,你可以使用它干更多的事情。任何時候用戶刷新頁面來查看新的數據,或者頁面通過長輪來獲取新的數據,這些應用都可以使用SignalR來實現。例如:儀表板,監控應用,協同應用(如同時對文檔進行編輯) ,工作進度更新,實時的形式。

      SingalR可以完成新類型的web應用-----需要高頻率從服務器更新。例如,實時游戲,一個很好的游戲應用例子:ShootR game.

      SingalR提供簡單的API來創建服務器到客戶端的遠程過程調用(RPC),調用Javascript函數在客戶端瀏覽器(和其他客戶端平台)從服務器端的.NET代碼。SignalR還包連接管理API (例如,連接和斷開事件),和分組連接。

       

       SignalR自動處理連接管理,同時允許你發送廣播消息到所有客戶端,就像一個聊天室。你也可以發送消息到特定的客戶端。客戶端與服務器之間的連接是持久化的,不像傳統的HTTP連接,需要重建連接為每一個通道。

       SignalR支持“服務器推送”功能,在服務器代碼中可以調用外部客戶端的代碼通過遠程過程調用(RPC)在瀏覽器中,而不是像今天常見的web的請求響應模式。

       SignalR應用可以擴展到成千上萬的客戶端使用服務總線,SQL Server或Redis.

       SignalR是開源的,可以通過Github訪問。

  • SignalR 與 WebSocket

       SignalR需要使用新型的WebSocket傳輸,需要使用舊的回落傳輸。然而你也可以直接使用WebSocket來實現,但是使用SignalR意味着許多你本來需要額外去實現的功能已經替你做了。更重要的是,這意味着你可以直接使用WebSocket來編寫你的應用,而不必擔心老的客戶端創建一個特殊的代碼路徑。SignalR可以免於你擔心WebSocket更新,應為SignalR將會繼續更新來支持底層傳輸的變化,為您的應用針對不同版本WebSocket提供一個一致接口。

       你也可以創建一個單獨使用WebSocket的解決方案,SignalR為你提供的所有功能你需要自己去寫,例如,回退到其他傳輸,當WebSocket更新時修訂你的程序。

  • Transports 與 fallbacks

   SignalR是需要通過一些抽象的傳輸來實現客戶端與服務器之間的實時工作。一個SignalR連接開始像HTTP,如果WebSocket連接可用將使用它。WebSocket對SignalR來說是理想化的傳輸,盡管WebSocket傳輸會占用較多服務器內存,具有最低的延時,具有最基本特征(如使用全雙工聯絡客戶端和服務器),它對設備也有嚴格的要求:WebSocket要求服務器使用Windows Server2012或者Windows 8和.Net Framework4.5.如果這些條件不滿足,SignalR將嘗試使用其他傳輸方式進行連接。

    

參考資料:

http://www.asp.net/signalr/overview/security/hub-authorization
https://github.com/JabbR/JabbR
http://www.asp.net/signalr/overview/guide-to-the-api/working-with-groups
http://www.codeproject.com/Articles/562023/Asp-Net-SignalR-Chat-Room

值得參閱文章及資源:

怎么開發一個在線會議系統:

http://stackoverflow.com/questions/470698/developing-a-video-chat-application-with-high-quality-video-streaming

videolan.視頻播放器:http://www.videolan.org/

videolan.討論區:https://forum.videolan.org/

在線視頻,語音開源技術:ConferenceXP:

ConferenceXP官網:http://cct.cs.washington.edu/ 

ConferenceXP作者github地址:https://github.com/fvideon

基於開源CTX SDK(http://site3.ucentrik.com/)開發的一個在線視頻例子:

http://vcca.codeplex.com/

原生在線視頻開發例子通過API開發:

http://www.codeproject.com/Articles/17048/Examples-to-create-your-Conferencing-System-in-NET

基於html5 WebRTC開發視屏:

http://www.codeproject.com/Articles/515192/Video-Conferencing-using-WebRTC

 

剛看到這個消息:

http://outercurve.org/

Outercurve基金會,曾用“CodePlex 基金會”為名(為了與CodePlex網站作區分所以進行了更名),成立於2009年9月10日,主要用來讓軟件業者及開源團體分享源代碼,並促進雙方的交流。
根據聲明,基金會主要采用論壇形式,讓開放源始碼社區及軟件開發社區一起促進參與 開源團體項目的共同目標。在既有的開放源碼組織之外,讓各界通過此一論壇分享彼 此的認知及最佳實現。
注: CodePlex 網站是一個由微軟所建置的 Open Source 網站,在此網站中所發布的所有程序都可以下載源代碼使用,目前它已經成為微軟軟件的周邊組件或擴展的發布管道。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM