1        轮询方式实现客户端数据及时更新

在基于Web的即时通信、股票行情这样的系统中,需要客户端能够及时更新内容。由于B/S架构的特性(Http连接是无状态连接, 即服务器处理完客户的请求,并收到客户的应答后即断开连接),最简单的方式是通过客户端轮询的方式实现客户端刷新。

较早是将一个隐藏的iframe嵌在网页中,通过该iframe不断刷新来获取最新内容,现在通过Ajax来实现,通过每隔一段时间发起Http请求实现数据更新,并可以实现异步更新。轮询方式显而易见的缺点就是会造成服务器较大负载。

Note:传统的JavaApplet和ActiveX通过Socket通信可以实现数据的及时更新。

2        Comet 服务器推送数据到客户端

现在还有一种技术是Comet,Comet其实就是许多年前流行的CGI聊天室所用的Server Push技术。这个方法一开始是由Client对Server建立连接,但是Server在建立连接后,送出的header中要把content-type设为“multipart/x-mixed-replace”,就是server之后要分或多次返回多片段数据,让Client保持连接,并且把每次拿到的数据取代之前的数据片段。接着client就只要在保持不断的连接上等着server发送的数据就好了。Comet利用这种特性,加上Ajax能异步更新数据,变成开发rich client非常重要的技术。

但Comet不像Ajax那样容易用到现成的http server上,它需要server上有适当的程式配合。[2]参考文献[1] 提供了使用Comet的代码片段。

3        HTML 5的数据更新

HTML5本身提供了对即时数据更新的支持。

Html5中的Server-Sent 事件用来实现网页自动获取来自服务器的更新,Server-Sent是单方面的消息传递。通过服务器发送事件,更新能够自动到达,从而实现微博更新、赛事结果这样的应用。

HTML5的Web Socket 使浏览器和服务器之间可以建立一个基于 TCP 连接的双向通道。Web 开发人员可以非常方便地使用 WebSocket 构建实时 web 应用。

4        参考

[1] Comet 服务器“推”技术,实现web服务器“主动”向客户端发送数据。

http://www.360doc.com/content/11/0617/16/597197_127627804.shtml

[2] Comet(Server Push) on Turbogears(2)

blog.vgod.tw/tag/server-push

[3] HTML5服务器发送事件.

http://www.w3school.com.cn/html5/html_5_serversentevents.asp

[4] 使用 HTML5 WebSocket 构建实时 Web 应用.

http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/

Web实时更新客户端数据的更多相关文章

  1. android ListView中含有按钮事件实时更新ListView数据案例

    1.布局文件Listview <?xml version="1.0" encoding="utf-8"?> <android.support. ...

  2. WebSocket 实时更新mysql数据到页面

    使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...

  3. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

  4. solr实时更新mysql数据的方法

    第一步:创建core core是solr的特有概念,每个core是一个查询数据,.索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1] 进入linux命令行,进入 ...

  5. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

  6. WinForm DataGridView实时更新表格数据

    前言 一个特殊的项目没有用第三方控件库,但用到了DataGridView,由于是客户端产生的数据,所以原始数据源就是一个集合. 根据需要会向集合中添加数据项,或是修改某些数据项的值,但DataGrid ...

  7. Jquery无刷新实时更新表格数据

    html代码: <style> .editbox { display:none } .editbox { font-size:14px; width:70px; background-co ...

  8. Web网站数据”实时”更新设计

    请注意这个实时打上了双引号,没有绝对的实时,只是时间的颗粒不一样罢了(1ms,1s,1m). 服务器数据有更新可以快速通知客户端.Web 基于取得模式,而服务器建立大量的和客户端连接来提供数据实时更新 ...

  9. 使用php+swoole对client数据实时更新(下)

    上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终 ...

随机推荐

  1. 【题解】Luogu P1011 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...

  2. 『无为则无心』Python基础 — 5、Python开发工具的安装与使用

    目录 1.Pycharm下载 2.Pycharm安装 3.PyCharm界面介绍 4.基本使用 (1)新建Python项目 (2)编写Python代码 (3)执行代码查看结果 (4)设置PyCharm ...

  3. Jenkins 构建自动化 .NET Core 发布镜像

    Jenkins 构建自动化 .NET Core 发布镜像 导读 在本章中,将介绍如何在 Linux 下使用 Docker 部署.启动 Jenkins,编写脚本,自动化构建 .NET Core 应用,最 ...

  4. Jrebel、IDEA的激活与Springloaded使用

    又有很长一段时间没写了,这次这篇随笔主要是分享下Jrebel与IDEA的激活方法以及推荐下Jrebel的替代工具Springloaded. 先来说下Jrebel的激活方法吧,之前有同事遇到了Jrebe ...

  5. Lin语法(Linq对数据库操作)

    一.Linq语句的应用: var queryAllCustomers = from cust in customers   group cust by cust.City into custGroup ...

  6. ES6学习笔记之字符串新增方法

    1.字符串的子串识别 传统上,Javascript 只有indexof 方法,用来确定一个字符串是否包含在另一个字符串中.如: //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的 ...

  7. OpenGL ES 压缩纹理

    什么是压缩纹理 在实际应用特别是游戏中纹理占用了相当大的包体积,而且GPU无法直接解码目前流行的图片格式,图片必须转换为RGB等类型的格式才能上传到GPU内存,这显然增加了GPU内存的占用.为了处理这 ...

  8. MySQL数据库快速入门与应用实战(阶段一)

    MySQL数据库快速入门与应用实战(阶段一) 作者 刘畅 时间 2020-09-02 实验环境说明: 系统:centos7.5 主机名 ip 配置 slavenode3 172.16.1.123 4核 ...

  9. 11、nginx+tomcat+redis_session共享

    11.1.前言: 1.多个tomcat要一起协同工作可以考虑的方案如下: (1)使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的 ...

  10. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...