实现实时通讯的几种方式

Httpweb

  http是无状态的协议,不保存会话状态。http是单向的通讯协议,即浏览器发起一个Request,服务器回应一个Response。浏览器

Ajax安全

  浏览器经过轮询(定时)的方式不断向服务器请求。这种伪实时的更新方式,效率偏低,通常而言,实时更新的数据,数据量并不大,所以每每容易形成Http请求的Header信息比数据自己还多,并且大量的请求是无用的。服务器

Cometwebsocket

  基于Ajax的长轮询(long-polling)。浏览器发出一个请求,服务器端会阻塞Request直到有数据传输或超时才返回。客户端处理完服务器发送的数据之后,继续发出请求。网络

  另外一种实现Comet技术的方式称为The forever iframe technique。它经过在页面中设置一个iframe标签,将src属性设置为一个对长链接的请求。缺点是页面始终会显示未彻底加载。异步

WebSocketsocket

  Websocket是Html5定义的一种新协议,实现了浏览器与服务器全双工通讯(full-duplex)。任何支持Html5的浏览器都支持WebSocket。浏览器发出WebSocket链接请求,服务器发出回应,创建通道,完成handshaking,实现真正的实时通讯。websocket容许经过JavaScript创建与远程服务器的链接,从而实现客户端与服务器间双向的通讯。函数

在websocket中有两个方法:加密

一、send() 向远程服务器发送数据

二、close() 关闭该websocket连接

websocket同时还定义了几个监听函数

一、onopen 当网络链接创建时触发该事件

二、onerror 当网络发生错误时触发该事件

三、onclose 当websocket被关闭时触发该事件

四、onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通讯中最重要的一个监听事件。

websocket还定义了一个readyState属性,这个属性能够返回websocket所处的状态:

一、CONNECTING(0) websocket正尝试与服务器创建链接

二、OPEN(1) websocket与服务器已经创建链接

三、CLOSING(2) websocket正在关闭与服务器的链接

四、CLOSED(3) websocket已经关闭了与服务器的链接

websocket的url开头是ws,若是须要ssl加密能够使用wss,当咱们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的以后,就能够进行即时通讯了。

总结

  Comet在遇到网络中断等问题时,很难在不刷新页面的状况下恢复通讯,而WebSocket中提供了一个onclse函数能够用来处理网络断开后的状况。

  Websocket是双向通讯的,因此可能出现安全问题。

 

SignalR

  SignalR,全称Microsoft ASP.NET SignalR,是一个使用 C#所写成的服务器端应用程式称呼,2012年由微软所开发。以“定时事件触发,异步输入输出”为其主要理念。

  当浏览器支持WebSocket时,SignalR使用WebSocket,当不支持时,使用其余技术来保证达到相同的效果。SignalR能够保证在不一样的浏览器中以相同方式实现WebSocket,而且提供了一些功能扩展以丰富WebSocket。

安装:使用Nuget ,Install-Package Microsoft.Aspnet.SignalR

         示例:Install-Package Microsoft.Aspnet.SignalR.Sample

相关文章
相关标签/搜索