今天从一个业余开发的群里,看到有人要求这样一个项目需求:

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 网站,在此网站中所发布的所有程序都可以下载源代码使用,目前它已经成为微软软件的周边组件或扩展的发布管道。   

原来现在很多人都用SignalR来实现Chat Room的更多相关文章

  1. 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?

    今天群里有人聊图片上传,简单说下自己的经验(大牛勿喷) 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那 ...

  2. 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)

    <西游记>中的唐僧团队历经千难万险,终于求得真经,目标明确.分工合理为这支队伍最终走向成功奠定了基础.唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇 ...

  3. [转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?

    (区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spide ...

  4. 听说特斯拉花了4个月研发出新ERP,然后很多人都疯了

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 最近这件事儿在SAP圈里炒的挺火的,最主要是因为这几个关键词: 放弃SAP.4个月.自研ERP: 这则新闻一出来,很多人都兴高采烈,都要疯了 ...

  5. 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~

    最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...

  6. 震惊!很多人都不知道 CSS Grid 框架早就有了!

    前言 写作本文起源于知乎的一个问题:[CSS Grid 布局那么好,为什么至今没有人开发出基于 Grid 布局的前端框架呢?] 这篇文章拖沓了两个月,是因为真的不知道从哪里说好.这个问题的所有回答几乎 ...

  7. 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那 ...

  8. 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞

    SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...

  9. 性能测试 | Linux系统top命令中的io使用率,很多人都误解了它的具体含义

    body{ text-align:left; width:80%; margin:10px 100px; } 最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题.那么,接 ...

随机推荐

  1. Tiffany

    --名称:Tiffany&Co(蒂芙尼) --总部:美国,纽约 --历史:1837年创立 --产品:珠宝.手表. 配饰.礼品 --特点:品牌,质量,奢饰品

  2. 20145235李涛 《Java程序设计》第3周学习总结

    类与对象 定义类 类是对象的“设计图”,对象是类的实际类型.另外,定义时用class,建实例用new. 通过书上的代码才有所理解: class Clothes { String color; char ...

  3. 20145317彭垚 《Java程序设计》第8周学习总结

    20145317彭垚 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 1.NIO的定义 InputStream.OutputStream的输入输出,基本上是以字节为单位进行 ...

  4. 数据库MySql阶段总结

    S1数据库中最重要的是查询,对于查询要有一个好的理解模型是很关键的: 1. 每一个查询都会返回一个结果集,这个结果集可能是一个值,一个字段或者一个记录,甚至可能是一个表 返回一个值 SELECT * ...

  5. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  6. 【No.1 Ionic】基础环境配置

    Node 安装 git clone https://github.com/nodejs/node cd node ./configure make sudo make install node -v ...

  7. Python之创建tuple和“可变”的tuple

    Python之创建tuple tuple是另一种有序的列表,中文翻译为" 元组 ".tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了. 同样是表示班里 ...

  8. Lambda中的一些方法的总结

    public List<UserInfoBaseModel> GetNameByIDList(List<int> UserID) { var UserList = LoadRe ...

  9. key_value 类型配置文件的解析

    #include <iostream> #include <string> #include <stdint.h> #include <map> #in ...

  10. Android 代码中文字在手机上显示乱码问题解决方法

    在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...