今天從一個業余開發的群里,看到有人要求這樣一個項目需求:
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/