原来现在很多人都用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/
原来现在很多人都用SignalR来实现Chat Room的更多相关文章
- 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?
今天群里有人聊图片上传,简单说下自己的经验(大牛勿喷) 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那 ...
- 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)
<西游记>中的唐僧团队历经千难万险,终于求得真经,目标明确.分工合理为这支队伍最终走向成功奠定了基础.唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇 ...
- [转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?
(区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spide ...
- 听说特斯拉花了4个月研发出新ERP,然后很多人都疯了
欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 最近这件事儿在SAP圈里炒的挺火的,最主要是因为这几个关键词: 放弃SAP.4个月.自研ERP: 这则新闻一出来,很多人都兴高采烈,都要疯了 ...
- 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~
最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...
- 震惊!很多人都不知道 CSS Grid 框架早就有了!
前言 写作本文起源于知乎的一个问题:[CSS Grid 布局那么好,为什么至今没有人开发出基于 Grid 布局的前端框架呢?] 这篇文章拖沓了两个月,是因为真的不知道从哪里说好.这个问题的所有回答几乎 ...
- 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那 ...
- 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞
SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...
- 性能测试 | Linux系统top命令中的io使用率,很多人都误解了它的具体含义
body{ text-align:left; width:80%; margin:10px 100px; } 最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题.那么,接 ...
随机推荐
- 使用CodeIgniter框架搭建RESTful API服务
使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12 | 分类于 翻译笔记 | 6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...
- IMP-00009: 导出文件异常结束
今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到" IMP-00009: 导出文件异常结束" 错误,google一下,发现可能有如下原因导致 imp的数据太大,没有 ...
- VS 本机调试
VS~通过IIS网站启用"域名"调试 在我们开发网站时,对某些信息进行序列化时,通常使用session,cookies,nosql等技术,而为了安全,我们在服务器上很多情况都做了防 ...
- 2.PHP内核探索:一次请求的开始与结束
PHP开始执行以后会经过两个主要的阶段: 处理请求之前的开始阶段 请求之后的结束阶段 开始阶段有两个过程: 第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以 ...
- 关于Java的File.separator
在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...
- 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素
在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...
- 分布式中,zookeeper的部署
一:准备 1.概述 为分布式应用提供协调服务的项目 类似于文件系统那样的树形数据结构 目的:将分布式服务不再由于协作冲突而另外实现协作服务 2.数据结构 树形数据结构 zookeeper的每个节点都是 ...
- MongoDB聚合查询
1.count:查询记录条数 db.user.count() 它也跟find一样可以有条件的 db.user.count({}) 2.distinct:用来找出给定键的所有不同的值 db.user.d ...
- PM2的使用
PM2 是一个带有负载均衡功能的 Node 应用的进程管理器. 安装 npm install -g pm2 启动程序:pm2 start <app_name|id|all> 列举进程:pm ...
- jQuery 遍历json数组的实现代码
<script type="text/javascript"> "}]; $(d1).each(function(){ alert(this.text+&qu ...