轮询: 前端不断向后台发请求以实时更新数据,不管后台数据是否有更新都会返回数据,后端程序编写比较容易。对服务器压力大。请求中有大半是无用,浪费带宽和服务器资源。适于小型应用。
长轮询:前端向后台发请求,后台数据如果还没有更新则不返回,直到后台数据更新了再返回给前端,前端收到后台返回的数据后才发下一次请求。在无消息的情况下不会频繁的请求。但是请求在后台一直悬挂,连接长时间保持,浪费资源。
轮询和长轮询都是客户端主动请求数据,服务端被动发送数据。
websocket:html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,属于和http协议同级,是基于TCP协议的协议。
TCP握手建立连接后客户端和服务端可以互相传递数据,服务端可以主动推送数据,是全双工的方式。
socket.io:node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。Socket.io将Websocket和轮询 (Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。也就是说,Websocket仅仅是 Socket.io实现实时通信的一个子集。
一个使用socket.io实现实时多人聊天的例子:http://39.108.92.238:1234
码云地址:https://gitee.com/qiapi/chatRoom
持续更新。。。
网友评论