消息推送从始至终~目录

认识它

消息推送这个东西从有了互联网就出现了,但直到出现了HTML5的Websocket,这个东西才算真的,更好了得到了解决,因为之前的方式,我们公认为,它对服务器的压力太大了,客户端不断的在做polling工作,直到服务端有了消息,然后将消息获取过来,这种方式,始终是被动式的,并且,通过浏览器发送的请求,在HTML5出现之前都是HTTP方式的,这种一个请求,一个响应的方式不能很好的实现一个长链接的保持,直到出现了websocket,它可以使一个客户端与服务端保持一个长链接,这事实上,也是实现服务器消息推送到客户端的基础。

它的发展历史

2000年之前为第一波消息推送技术,使用的概念叫Webcasting。大致思想就是用户来服务端注册一个或者多个通道channel,然后服务端确定给某些个channel或某个channel发送消息。2000到2007年最火的词叫comet,比如有Polling(这个是最普通的轮询),Long Polling(把HTTP的响应锁住,当有消息时,通过channel返回客户端),但是不管什么技术,都仅限浏览器,而又因为浏览器只能发起HTTP的单向的通信请求,所以,人们就想起了更稳定的长链接方式socket,但是Socket方式是走TCP协议的,浏览器如何能发起TCP连接呢?HTML5的Websocket技术就解决了这个问题。

新协议,老技术

Websocket其实是一些老技术的结合,本身并不是一种新的技术,但是一种新的协议,它的地址形式如ws://192.168.0.3:8090,wss://192.168.0.3:8090,后面的地址形式是加密的,就是HTTP协议地址有http和https一样。

Websocket它首先向服务器发一个HTTP请求,与服务器握手成功后,再以TCP的方式进行数据传输,所以Websocket其实是结合了HTTP和TCP协议的一种新的协议方式,但本身的技术是老的,呵呵。

百度百科对websocket的阐述

目标

WebSocket 规范的目标是在浏览器中实现和服务器端双向通信。双向通信可以拓展浏览器上的应用类型,例如实时的数据推送(股票行情)、游戏、聊天等.

背景

在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但 效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协 议,能更好的节省服务器资源和带宽并达到实时通讯。

原理

WebSocket protocol 是HTML5一种新的协议(protocol)。它是实现了浏览器与服务器全双工通信(full-duplex)。
现很多网站为了实现即时通讯(real-time),所用的技术都是轮询(polling)。轮询是在特定的的时间 间隔(time interval)(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求(request),然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。
而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求(reuqest)。
在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此 WebSocket 协议中,为我们实现即时服务带来了两大好处:
1. Header
互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push
服务器可以主动传送数据给客户端

目录

第一回  认识Websocket及原来的消息推送方式

第二回  SignalR的出现,改变了这一切

第三回  SignalR与MVC搭建消息推送环境

相关参考文章

http://www.asp.net/signalr

http://baike.baidu.com/view/3623887.htm

 

posted @   张占岭  阅读(3509)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-07-10 基础才是重中之重~.net中的显式事务与隐式事务
点击右上角即可分享
微信分享提示