实现实时通信的几种方式

Http

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

Ajax

  浏览器通过轮询(定时)的方式不断向服务器请求。这种伪实时的更新方式,效率偏低,一般而言,实时更新的数据,数据量并不大,因此往往容易造成Http请求的Header信息比数据本身还多,而且大量的请求是无用的。

Comet

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

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

WebSocket

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

在websocket中有两个方法:

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

2、close() 关闭该websocket链接

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

1、onopen 当网络连接建立时触发该事件

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

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

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

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

1、CONNECTING(0) websocket正尝试与服务器建立连接

2、OPEN(1) websocket与服务器已经建立连接

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

4、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

posted @ 2014-06-30 20:15  pluiefox  阅读(4348)  评论(0编辑  收藏  举报