专业编程基础技术教程

网站首页 > 基础教程 正文

菜鸟必知:实时获取数据的五种方案

ccvgpt 2024-11-30 19:15:20 基础教程 2 ℃

在开发的项目中,需要实时获取最新的股价,实时显示项目在线人数,即时通讯等。你会通过什么方法实现呢?下面就说说实时获取数据的几种方式,我尽量按照从low到复杂的顺序罗列。

http协议

这个协议大家肯定很熟悉了,客户端与服务端三次握手后就可以实时交换数据了,基于这个基础,可以用几个方法来实时获取数据。

菜鸟必知:实时获取数据的五种方案

ifram/frame

对于菜鸟来说,这未必不是个聪明的解决方法。在需要显示的区域嵌入一个frame框,然后通过js或meta标签控制,不停的刷新获取。

优点:简单实用。
缺点:不停地向服务器请求,对服务器压力最大。
应用场景:局域网,客户端数量不大

短轮询

这里我们要用到ajax了,还是通过Js重复的请求服务器来获取实时数据。比起frame刷新,减少了浏览器的渲染过程。并且因为使用了异步处理,没有画面闪现。交互效果更好。

优点:异步处理,交互效果好
缺点:仍然需要不停地向服务器请求
应用场景:短时间的获取数据,比如支付状态,授权登录状态判断等

长轮询

长轮询与短轮询的唯一区别是,服务端会判断数据变化来响应客户端。如果数据未发生变化,则暂时阻塞。这样就减少了许多无意义的重复请求

优点:减少请求响应次数
缺点:仍然需要不停地向服务器请求,还有挂起时比较消耗内存。
应用场景:icommet等插件就是用的长轮询。

websocket协议

上面的三种方式都用了http协议,缺点不言而谕了。都需要周期性的向服务器请求,对服务器造成压力。而且也不能得到真正的实时数据,因为每次周期请求都会有间隔。这时候我们就用到了websocket协议了。
与http协议很相似也需要三次握手,只是服务器返回的状态码不是200,而是101.意味着接下来客户端与服务端之间的通信是通过websocket来进行的。这个通信服务端会阻塞,是不会中断的。每当有数据变化时就会主动传给客户端。

websocket

比起http协议,websocket节不需要重复请求。而且响应数据不必包含header头文件,只响应body部分。因此节省了流量和服务器压力。实现了真正的实时数据。

优点:不用重复请求服务器,响应数据不用带header头
缺点:不兼容低版本IE,开发相对复杂。
应用场景:对数据实时变化要求高的场景

xmpp

xmpp是在websocket基础上的即时通信协议,主要应用于即时通讯。数据传输使用xmL格式。

优点:有相应的框架,sdk,使用简单。
缺点:请求过多时,对服务器内存,cpu要求较高
应用场景:即时通讯

结语

本文说了实时获取数据的几种方式,针对不同的应用场景和实际情况采纳不同的方案,有时候简单一点挺好。下次咱们聊聊使用websocket开发聊天室的实例。

最近发表
标签列表