原来现在很多人都用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 网站,在此网站中所发布的所有程序都可以下载源代码使用,目前它已经成为微软软件的周边组件或扩展的发布管道。   
原文地址:https://www.cnblogs.com/yy3b2007com/p/4643947.html