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. ES6中的字符串

    字符串在编程语言中,一直是使用率很高的数据,虽说函数在js语言中是一等公民,但是字符串,怎么也能算得上是千年老二,下面我就一起和大家探讨一下在es6中的一些新用法和特性,特别是在字符串拼接的时候,会解 ...

  2. Spring Data JPA的Audit功能,审计数据库的变更

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 数据库审计 数据库审计是指当数据库有记录变更时,可以记录数据库的变更时间和变更人等,这样以后出问题回溯问责也比较方便. ...

  3. 在 raspberry pi pico 上体验 MicroPython

    raspberry pi pico 官方提供 2 种开发方式,其中一种是使用 python3 开发,树莓派提供了 MicroPython 固件,把这个固件烧录进去,就可以 在 pico 上跑 pyth ...

  4. GetModuleFileName函数的用法

    函数的功能 获取exe可执行文件的绝对路径. 用法 通过获取到exe的路径,可以获取到程序路径下(父路径或者子路径)的一些其它文件路径. 函数原型 DWORD WINAPI GetModuleFile ...

  5. Jquery手机点击其他地方隐藏控件问题

    因为不太懂mui的底部导航栏的操作,所以自己写了用很普通的方法实现手机底部导航栏,遇到了很多问题.比如:要实现点击底部菜单栏上某一个菜单,显示子菜单,然后点击手机空白处,隐藏菜单. 实现方法是: // ...

  6. Linux 动态库 undefined symbol 原因定位与解决方法

    在使用动态库开发部署时,遇到最多的问题可能就是 undefined symbol 了,导致这个出现这个问题的原因有多种多样,快速找到原因,采用对应的方法解决是本文写作的目的. 可能的原因 依赖库未找到 ...

  7. namenode和datanode启动失败

    1.namenode启动失败,查看错误原因,是无法格式化,再看日志,根据日志提示,清空对应的目录,即可解决这个问题. 2.datanode启动失败: Can't open /var/run/cloud ...

  8. mqtt 集成

    -- 在pom.xml导入依赖 <!-- mqtt --> <dependency> <groupId>org.springframework.boot</g ...

  9. Jenkins集成SonarQube遇到的报错

    Jenkins集成Sonar过程中遇到的报错 1.jenkins中无法添加sonarqube的token凭证 因为添加的凭证类型错误,所以无法添加token,类型应该选择"Secret te ...

  10. 「CF521E」 Cycling City

    「CF521E」 Cycling City 传送门 首先你能发现这个东西一定是两个环的公共边. 最开始想的是什么如果一个点被访问过三次那它一定是公共边的某一端之类的东西,然后发现被仙人掌叉掉. 然后就 ...