C# web通信解决方案
1.Socket
2.Socket and websocket(HTML5)
3.SignalR
一,简介
Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架。它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息。
可访问其官方网站:https://github.com/SignalR/ 获取更多资讯。
二,实现机制
SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现。在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是实现了长时间的 Javascript 轮询(类似于 Comet),Hub 是用来解决实时信息交换问题,它是利用 Javascript 动态载入执行方法实现的。SignalR 将整个连接,信息交换过程封装得非常漂亮,客户端与服务器端全部使用 JSON 来交换数据。
ASP.NET signalr对ASP.NET开发者来说是一个新的程序库,它能让我们更加容易便捷地开发实时通信功能;
signalr允许客户端和服务器之间双向通信。服务器可以将内容推送到已连接的客户端。
signalr支持Web Sockets,遇到其他兼容旧的浏览器signalr会用其他技术支持"双向通信"(不要较真)。
signalr包括这些API:连接管理(例如,连接和断开连接的事件)、对连接分组、和访问功能授权。
signalr可以用来添加任何形式的“实时通信”功能到您的ASP.NET应用程序。聊天是经常被用来作为一个应用例子,当然你可以做更多的事情。
用户常常通过刷新网页来查看新数据,或者页面支持长轮询来检索新的数据,使用signalr机制中支持这个方式,但它更智能更强大友好。
SignalR同时支持新类型的网络应用情况:需要高频度从服务端更新的情况(如实时游戏、看看这个ShootR game.)
SignalR提供了更加便捷简单的API,
signalr会自动地使用websocket通信(只要条件允许),条件不满足的时候也会自动使用其他旧的传输方式。当然你可以直接让你的程序直接使用WebSocket.
使用signalr意味着原先你需要自己花精力做的工作不需要再自己做了,因为它已经为你做了。最重要的是,它会持续更新跟进WebSocket技术,所以你不用担心
协议变化这类事情.
signalr是对客户端和服务器之间通信方式的一个抽象。一个signalr启动时使用HTTP连接,然后当环境允许就会直接提升到WebSocket连接。
WebSocket是SignalR的理想通信方式,因为WebSocket使服务器的内存得到最有效的利用,同时WebSocket具有最低的延迟,并拥有最底层特征(如客户端和服务器之间的全双工通信),但WebSocket也有最严格的要求:WebSocket需要服务器使用Windows Server 2012或Windows 8,和.NET框架4.5。如果不能满足这些要求,signalr将尝试使用其他通讯方式进行连接。
下面的列表展示了SignalR决定使用具体哪种通信方式
- 如果浏览器<=Internet Explorer 8,用长轮询的方式
- 如果配置中指定了使用jsonp,则会使用长轮询的方式
- 如何需要创建跨域连接,将会如使用WebSocket,如果一下条件满足的话(否则用长轮询)
- 客户端支持WebSocket
- 服务端支持WebSocket
- 客户端支持Cross-Origin Resource Sharing,这个大家自己百度
建立一个通讯方式需要一定的时间和客户机/服务器资源。如果客户机的功能是已知的,那么通信方式在客户端连接开始的时候就可以指定。下面的代码片段演示了使用AJAX长轮询方式来启动一个连接,将如果我们知道该客户端不支持其他的协议的话:
connection.start({ transport: 'longPolling' });
你可以指定一个替补方式,如果你想让客户端按照顺序尝试通讯方式的话.下面的代码片段展示了尝试使用WebSocket,如果失败直接使用长轮询。
connection.start({ transport: ['webSockets','longPolling'] });
指定将字符串常量定义如下:
webSockets
foreverFrame
serverSentEvents
longPolling
SignalR API包括两种模型(用于客户端和服务端的通信):持久连接模型(Persistent Connections)和集线器(Hubs)模型
一个连接代表一个简单的终结点(相当于单个收件人、被分组的、广播消息 而言)
持久连接API(在.NET代码中以PersistentConnection呈现),它使得开发人员便捷使用SignalR暴露的底层通讯协议
连接通信模型,对习惯于使用类似WCF的同学们比较熟悉.
集线器模型是一个建立于连接API的高级管道.SignalR处理夸机器便捷的调度问题易如反掌,它使得客户端调用服务端的方法简单得犹如调用本地方法一样.反之亦然.
使用Hubs模型,或许对那些使用过.net remoting的人来讲就很容易理解了.使用Hub还可以让你对强类型参数方法、model绑定成为易事.
SignalR服务端组件可以被部署在一下的服务端和客户端操作系统中.注意使用WebSockets时,SignalR需要Windows Server 2012 或者Windows 8,
(WebSocket能够在Windows Azure Web Sites上使用,只要站点的.NET framework 版本达到4.5,且WebSocket能在站点的配置页面使用)
- Windows Server 2012
- Windows Server 2008 r2
- Windows 8
- Windows 7
- Windows Azure
当SignalR部署在IIS中,需要下面的版本支持。注意如果使用在我们自己的操作系统上,如开发所用的环境(Windows 8 or Windows 7),所有版本的IIS和Cassini不应该被使用,因为这里有一个10同时并发的限制,因为连接是短暂、频繁重新建立的、且不会立即被dispose,所以很快就会达到限制。IIS Express可以被使用在一般的操作系统上。
同时注意SignalR使用WebSocket时,IIS 8 或者 IIS 8 Express是你需要的,服务器必须用Windows 8, Windows Server 2012, 或者更高,同时WebSocket必须在IIS中可用。你可以去之类看看如何开启IIS的WebSocket功能:IIS 8.0 WebSocket Protocol Support
- IIS 8 或者IIS 8 Express.
- IIS 7 和 7.5. 需要支持 extensionless URLs .
- IIS 必须跑在集成模式下; 经典模式是不行的.
- 我们的系统程序必须跑在完全信任的模式下.
SignalR能够在很多客户端平台下运行,本节描述了客户端浏览器、桌面应用程序、Silverlight应用程序及手机设备在使用SignalR的需求。
1.浏览器
SignalR支持许多中种类的浏览器,尤其是最近浏览器的两个版本。
在浏览器中使用signalr的应用程序必须使用jQuery的版本>=1.6.4.
signalr可在以下浏览器中使用:
- IE:8, 9, 10, and 11.现代桌面版和手机版也支持
- Mozilla Firefox:所有版本,请允许我这么说
- Google Chrome: 所有版本,请允许我这么说
- Safari:所有版本,请允许我这么说
- Opera: 所有版本,只支持WINDOWS版本
- Android 浏览器
浏览器协议需求 通讯协议 Internet
ExplorerChrome
(Windows or iOS)Firefox Safari
(OSX or iOS)Android WebSockets 10+ current - 1 current - 1 current - 1 N/A Server-Sent Events N/A current - 1 current - 1 current - 1 N/A ForeverFrame 8+ N/A N/A N/A 4.1 Long Polling 8+ current - 1 current - 1 current - 1 4.1 2.桌面应用程序和Silverlight程序
注意:有人在做supersocket,所以我们可以让它运行得更强大,一下是官方给出的图
桌面应用程序和Silverlight程序通讯协议需求 通讯协议 .NET application Silverlight Web Sockets Windows 8+ and .NET 4.5+ N/A Forever Frame N/A N/A Server-Sent Events .NET 4+ 5+ Long Polling .NET 4+ 5+ 3.Windows Store和Windows Phone应用程序
如上,我们可以借助第三方做事情
Windows Store 和Windows Phone 通讯协议需求 Transport Windows Store/
.NETWindows Store/
JavaScriptWindows Phone/
IEWindows Phone/
.NETWebSockets N/A Win8+ 8+ N/A Forever Frame N/A Win8+ 7.5+ N/A Server-Sent Events Win8+ N/A N/A 8+ Long Polling Win8+ Win8+ 7.5+ 8+ 参考地址:http://www.cnblogs.com/humble/p/3856357.html
C# web通信解决方案的更多相关文章
- 即时Web通信总结
即时Web通信在一些对数据实时性要求特别严格的应用中十分重要,如监控系统.报价系统.股票交易系统和即时在线聊天应用等,由于http协议设计当初是为了服务器端响应客户端的请求而设计的,只能在客户端主动发 ...
- JavaScript之web通信
web通信,一个特别大的topic,涉及面也是很广的.因最近学习了 javascript 中一些 web 通信知识,在这里总结下.文中应该会有理解错误或者表述不清晰的地方,还望斧正! 一.前言 1. ...
- 【转】JavaScript之web通信
原文转自:http://cloudbbs.org/forum.php?mod=viewthread&tid=28773&page=1&extra=#pid180304 一.前言 ...
- Spirit - 腾讯移动 Web 整体解决方案
Spirit 并不是一个具体的框架或者工具,但是她是移动端一系列解决方案的整合与聚拢.她是腾讯 Alloyteam 开发团队在移动开发项目中通过大量实践.归纳.总结提炼而成,最终沉淀下来的一个体系,真 ...
- Web 通信 之 长连接、长轮询(转)
Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强 ...
- 实现SVN与WEB同步解决方案(转)
实现SVN与WEB同步解决方案 1)设置WEB服务器根目录为/www/default 2)checkout一份SVN svn co svn://localhost/oplinux /www/defau ...
- Web通信之:长轮询(long-polling)(转)
Web通信之:长轮询(long-polling) “轮询”是个耐人寻味的词,第一次看到它的时候我就直接理解为“轮流查询”了.但是看到了英文才知道这个是网络通信专业的术语.轮询,其实就是一群人在排队买东 ...
- Web通信中的Get、Post方法
首先我们要了解Tomcat,Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选. ...
- 《精通CSS:高级Web标准解决方案》学习笔记(上)
鉴于国产CSS书籍基本都是辣鸡的现状,我在半年前动用某工作室的购书资金采购了一些技术书籍,这本广受好评的<精通CSS>也在其中.但是在阅读过后我深深的感觉到,如果说CSS本来已经是一种很琐 ...
随机推荐
- eclipse配置项目部署到到本地tomcat
一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...
- java代码用户界面网格布局GridLayout.划分为格子区域
总结:网格布局.很简单,首先要new一个 this.setlayout(new GriedLayout(3,5));里面是行数和列数 package clientFrame; //网格布局练习 i ...
- 1116 Come on! Let's C
题意:略. 思路:略. 代码: #include <cstdio> #include <cmath> ; }; bool isPrime(int n) { ) return f ...
- oracle中,约束、表名、Index等的名称长度限制最大只能30个字符
oracle中,约束.表名.Index等的名称长度限制最大只能30个字符
- ubuntu 16.04更新软件源
1.打开 system settings 2.打开 system栏目里的 software and updates 3.打开 ubuntu software 栏目里的 download from 4. ...
- SqlServer——常见问题汇总
1.存储过程手动执行正常,应用程序高并发允许时,数据成倍数增加 通常此类问题是由于存储过程中使用了永久表作为中间表,用以存储临时数据.当高并发时,比如同时执行3次,则同时往中间表中插入3倍的数据,得到 ...
- csdn知识库
- 利用jquery mobiscroll插件选择日期、select、treeList的具体运用
体验更优排版请移步原文:http://blog.kwin.wang/programming/jquery-mobiscroll-select-treeList.html mobiscroll是个很好用 ...
- solrserver实例化
以下是httpClient实例化方式,需要tomcat运行Solr服务 1.ConcurrentUpdateSolrServer实例化SolrServer,该类实例化多用于更新删除索引操作 Concu ...
- SQL Server 触发器触发器
内容摘抄自http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html,只供自己笔记使用 触发器是一种特殊类型的存储过程,它不同于之前的我们 ...