网站首页 > 基础教程 正文
在开发的项目中,需要实时获取最新的股价,实时显示项目在线人数,即时通讯等。你会通过什么方法实现呢?下面就说说实时获取数据的几种方式,我尽量按照从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开发聊天室的实例。
猜你喜欢
- 2024-11-30 零代码组态监控系统,轻松配置运行工况
- 2024-11-30 Github工具库(二)
- 2024-11-30 十二个常见的Web安全漏洞总结及防范措施
- 2024-11-30 Github工具库(四)
- 2024-11-30 Clash远程代码执行漏洞
- 2024-11-30 菜鸟的日淘试水:LUSH日本官网购入一大波洗护用品
- 2024-11-30 Cocos 3.x 菜鸟一起玩:打包window程序
- 2024-11-30 前端vue与后端Thinkphp在服务器的部署
- 2024-11-30 ES6的一些梳理
- 2024-11-30 [Eclipse篇]05.从菜鸟开始のSpket插件.md
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)