前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent...客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。...2] 客户与服务器端通信的信息格式,采取怎样的出错处理机制。 3] 客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows 和 Linux 平台。...如果是基于 AJAX 的长轮询方式,客户端可以异步地发出一个 XMLHttpRequest 请求,通知服务器端关闭数据连接。...如果客户端使用的是基于 AJAX 的长轮询方式;服务器端返回数据、关闭连接后,经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放为这个客户端分配、维护的资源。
本文首先介绍、比较了常用的 “服务器推”方案,着重介绍了 Comet - 使用 HTTP 长连接、无须浏览器安装插件的两种“服务器推”方案:基于 AJAX 的长轮询方式;基于 iframe 及 htmlfile...客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。...客户与服务器端通信的信息格式,采取怎样的出错处理机制。 客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows 和 Linux 平台。...如果是基 于 AJAX 的长轮询方式,客户端可以异步地发出一个 XMLHttpRequest 请求,通知服务器端关闭数据连接。...如果客户端使用的是基于 AJAX 的长轮询方式;服务器端返回数据、关闭连接后,经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放为这个客户端分配、维护的资源。
①轮询 短轮询的基本思路就是浏览器每隔一段时间向浏览器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。...这种方式的优点是比较简单,易于理解,实现起来也没有什么技术难点。缺点是显而易见的,这种方式由于需要不断的建立http连接,严重浪费了服务器端和客户端的资源。...(comet) ajax实现: 当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。...如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制(服务器端设置)才返回。 。 客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。 ...而理想的模型是"在服务器端数据有了变化后,可以主动推送给客户端",这种"主动型"服务器是解决这类问题的很好的方案。Web Sockets就是这样的方案。
兴起原因 随着AJAX技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大。...Google更是提出“有了浏览器和Google,就不需要微软”的口号和策略。...现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。...接下来是长连接 长连接 所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。...服务器端超时,服务器端如果较长时间没有使用一个socket也会发生一个异常,这个时间相对客户端超时较长,大约为1个小时。
4、长轮询,是轮询的升级版,需要服务器端的配合。 5、websocket,HTML5的通信功能,建立一个与服务器端的专用接口ws协议来进行通讯,兼容可能成为问题,改天研究一下这个。...这篇博文总结一下用JS和JQ两种方式(其实不同就是js和jq的实现),实现AJAX长轮询。 长轮询的思想: ? 如图:用AJAX发送询问信息,服务器在没有信息要返回的时候进入无限等待。...flag标记 } PHP脚本: 脚本的主要目的是处理来自ajax的每次询问,ajax每次询问就查询一下数据库,看有没有新的信息,如果没有,刚用usleep()函数等待一秒后再次查询,直到有新信息插入数据库并被查到...} 客户端实现: 客户端的主要任务是设置一个ajax请求函数,每次查询时被调用,当没有信息返回时,服务器端被搁置,当前页面正常执行;当有信息返回时,函数处理返回的数据,并迅速再次调用此函数发送一次请求。...需要注意的是,用JS原生实现POST请求发送信息时,要设置ajax对象的HTTP头,模拟表单提交的操作: xhr.setRequestHeader("Content-type","application
术语可能有些混乱,但是当我介绍 AJAX 时,就是在介绍从客户端异步调用服务器端函数的整体框架。提到 Ajax.NET 时,我是指能够帮助您创建利用 AJAX 框架的解决方案的特定实现。...当选定的索引更改时,返回页;或者将所有可能的数据加载到 JavaScript 数组并动态显示。希望您可以看到 AJAX 如何替代这两种解决方案。...我们将使用轮询系统来检查是否存在任何可用的队列文档。一般来说,这意味着我们将在稍后一段时间内一直调用服务器端方法,并显示结果。在加载页面时仅发生第一次调用,每隔 X 秒发生后续调用。...尽管我们已经看到使用 Ajax.NET 可以轻松地创建启用 AJAX 的解决方案,但还存在一些其他的注意事项。一个需要着重关注的问题是对您的应用程序的整体体系结构和可维护性的影响。...就个人而言,我见过的最佳的 AJAX 实现非常轻便合适。您自己的实现应为您的用户提供同样积极的体验。但是,对于某个具体问题,记住 AJAX 可能不是唯一的解决方案,也可能不是最佳的解决方案。
Ajax的出现使客户端与服务器端传输数据少了很多,也快了很多,也满足了以丰富用户体验为特点的web2.0时代 初期发展的需要,但是慢慢地也暴露了他的弊端。...Comet则不同,客户端与服务器端保持一个长连接,只有客户端需要的数据更新时,服务器才主动将数据推送给客户端。 ?...在此期间服务器端可能已经有新的数据到达,服务器会选择把数据保存,直到重新建立连接,浏览器会把所有数据一次性取回。 ?...Websocket:未来的解决方案1 如果说Ajax的出现是互联网发展的必然,那么Comet技术的出现则更多透露出一种无奈,仅仅作为一种hack技术,因为没有更好的解决方案。...依惯例,每当需要双向套接字时,就会用到Flash,并且WebSocket的向后兼容通常是用Flash来做,这已经相当复杂了,如果浏览器上没有Flash,情况更糟。
但此方案的缺点在于: 客户端必须安装 Flash 播放器; 因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙; 因为是使用套接口,需要设置一个通信端口,防火墙...服务器端的性能和可扩展性 一般 Web 服务器会为每个连接创建一个线程,如果在大型的商业应用中使用 Comet,服务器端需要维护大量并发的长连接。...在实现上,如果是基于 iframe 流方式的长连接,客户端页面需要使用两个 iframe,一个是控制帧,用于往服务器端发送控制请求,控制请求能很快收到响应,不会被堵塞;一个是显示帧,用于往服务器端发送长连接请求...如果是基于 AJAX 的长轮询方式,客户端可以异步地发出一个 XMLHttpRequest 请求,通知服务器端关闭数据连接。...如果客户端使用的是基于 AJAX 的长轮询方式;服务器端返回数据、关闭连接后,经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放为这个客户端分配、维护的资源。
AJAX轮询 这是我们最自然想到的。 采用常规AJAX轮询的方式,每10s或者30s轮询一次,既可以判断出有有多少个新订单进入,且这种时间间隔对于消息提醒也是可以接受的。...但是这种方式会有非常严重的问题,就是需要不断的向服务器发送消息询问,如果有1w个商家打开了浏览器,采用10s轮询的方式,则服务器则会承担1000 的QPS,这1w个商家可能只有10个有订单通知;这种方式会对服务器造成极大的性能浪费...长轮询优缺点 优点 客户端很容易实现良好的错误处理系统和超时管理,实现成本与Ajax轮询的方式类似。 缺点 需要服务器端有特殊的功能来临时挂起连接。...如果客户端使用的是基于 AJAX 的长轮询方式;服务器端返回数据、关闭连接后,经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放为这个客户端分配、维护的资源。...总结 总结下来长轮询不是一个很好的方案,而且对于服务器而言是有风险的;另外支持WebSocket协议的浏览器都比较新,特比是IE需要10以上的版本;而我们的业务是面向于商家端,商家的浏览器版本相对较低,
后来有人提出了AJAX,AJAX使得页面的体验更加“动态”,可以在后台发起到服务器的请求。但是,如果服务器有更多数据需要推送到客户端,在页面加载完成后是无法实现直接将数据从服务器发送给客户端的。...为了解决这个问题,有人提出了很多解决方案。最简单(暴力)的方案是用轮询:每隔一段时间都会向服务器请求新数据。这让用户感觉应用是实时的。...当然不是说Comet本身有问题,因为还没有其他替代方案前Comet是我们的唯一选择。 浏览器插件(如Flash)和Java同样被用于实现服务器推。...现在HTML5规范为我们准备了一个替代方案。...诚然,如果连接无法快速建立,则迅速优雅降级使用Comet和轮询的方式来处理。 那么,如何选择服务器端的解决方案呢?
时至今日,虽然有了querySelector与querySelectorAll,但jQuery的选择器仍然有少部分特性是前2者所无法替代的。...然而在从前的技术框架内只能刷新整个页面,带来的后果是:①需要重新传输整个页面,服务器端与客户端的流量消耗都会比较大;②如果是动态页,服务器端需要重新生成整个页面,即使是那些客户原本不想要刷新的区域,增大了服务器的负担...这样,页面脚本如果想要改变一个区域的内容,只需要通过ajax向服务器获取与该区域有关的少量数据,在回调函数中将该区域的内容替换掉即可,不需要刷新整个页面。...但是XML格式有一个缺点,就是文档构造复杂,需要传输比较多的字节数。在这种情况下,JSON的轻便性逐渐得到重视,后来替代XML成为ajax最主要的数据传输格式。...校验这个名称不能重复,就需要把数据提交上去,与服务器端数据交互的方法就是 form 提交表单。这时候需要用户填完所有的表单,点击『确定』之后提交校验。如果此时名称被占用就悲剧了。
后来有人提出了AJAX,AJAX使得页面的体验更加“动态”,可以在后台发起到服务器的请求。但是,如果服务器有更多数据需要推送到客户端,在页面加载完成后是无法实现直接将数据从服务器发送给客户端的。...当然不是说Comet本身有问题,因为还没有其他替代方案前Comet是我们的唯一选择。 浏览器插件(如Flash)和Java同样被用于实现服务器推。...现在HTML5规范为我们准备了一个替代方案。...这样的想法并没有错,幸运的是,我们有解决方案。...诚然,如果连接无法快速建立,则迅速优雅降级使用Comet和轮询的方式来处理。 那么,如何选择服务器端的解决方案呢?
将传统的方法迁移到Web上,首先考虑的是如何在功能有限的浏览器端接收、处理信息: 客户端如何接收、处理信息,是否需要使用套接口或是使用远程调用。...客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。...客户与服务器端通信的信息格式,采取怎样的出错处理机制。 客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows 和 Linux 平台。...(5)AJAX 的长轮询(long-polling)方式-通过在HTTP的Response Header中设置KeepAlive参数可以让浏览器客户端和服务器保持较长的一段时间通信,与单纯使用AJAX...Flash XMLSocket只有在安装了 Flash 播放器才能正常运行,此方案的缺点在于: 1.客户端必须安装 Flash 播放器; 2.因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket
这种同步方案的最大问题是,当客户端以固定频率向服务器发起请求的时候,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,所以这是一种非常低效的实时方案。...当然,如果服务端的数据变更非常频繁的话,这种机制和定时轮询比较起来没有本质上的性能的提高。 流: 流技术方案通常就是在客户端的页面使用一个隐藏的窗口向服务端发出一个长连接的请求。...这种机制在用户体验上有一点问题,需要针对不同的浏览器设计不同的方案来改进用户体验,同时这种机制在并发比较大的情况下,对服务器端的资源是一个极大的考验。...综合这几种方案,您会发现这些目前我们所使用的所谓的实时技术并不是真正的实时技术,它们只是在用Ajax方式来模拟实时的效果,在每次客户端和服务器端交互的时候都是一次HTTP的请求和应答的过程,而每一次的HTTP...通过这张图可以清楚的看出,在流量和负载增大的情况下,WebSocket方案相比传统的Ajax轮询方案有极大的性能优势。这也是为什么我们认为WebSocket是未来实时Web应用的首选方案的原因。
过期:因为现在大部分 扫码登录采用的为 轮询的方式,pc 客户端浏览器 每隔 1-2s 向 server 发送请求 查询登录二维码的状态,如果很多用户都要扫码登录,那对服务器的负责分发请求的将是一个很大的压力...,但后端需要轮询。...3.websocket 轮询与长轮询都是基于HTTP的,两者本身存在着缺陷:轮询需要更快的处理速度;长轮询则更要求处理并发的能力;两者都是“被动型服务器”的体现:服务器不会主动推送信息...而理想的模型是"在服务器端数据有了变化后,可以主动推送给客户端",这种"主动型"服务器是解决这类问题的很好的方案。Web Sockets就是这样的方案。...长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。...二、长连接、长轮询的应用场景 长连接、长轮询一般应用与WebIM、ChatRoom和一些需要及时交互的网站应用中。其真实案例有:WebQQ、Hi网页版、Facebook IM等。...如果你对服务器端的反向Ajax感兴趣,可以参考这篇文章 DWR 反向Ajax 服务器端推的方式:http://www.cnblogs.com/hoojo/category/276235.html 欢迎大家继续支持和关注我的博客...如果没有程序环境适应servlet即可,将方法体中的代码copy到servlet的doGet/doPost中即可。 服务器端在进行长连接的程序设计时,要注意以下几点: 1....当然你选择经由HTTP长轮询使用XMLHttpRequest对象(在服务器端挂起的一个简单的Ajax请求)的Comet模式,所有支持Ajax的浏览器也都支持该种做法。
---- 长轮询 相比于上一种实现,长轮询同样是客户端发起请求,服务端返回数据,只不过不同的是,在长轮询的情况下,服务器端在接到客户端请求之后,如果发现数据库中的数据并没有更新或者不符合要求,那么就不会立即响应客户端...当然,如果你想长连接每次也都能保证得到响应也是可以的,大致做法就是在页面中插入不止一条 script标签,每条标签对应一个请求,等到当前请求到达再决定是否移除当前 script标签。...WebSocket能够连接上服务器,服务端必须要具备能够响应 WebSocket类型的请求才行,一般的服务器是没有自带这种能力的,所以必须要对服务器端程序代码做出些改变。...,解决了原有AJAX应用必需请求HTTP控制组件(如Servlet,Struts的AcTIon等)才能调用服务器端业务类的方法,从而简化了AJAX应用的开发。...最新版本的DWR 2.X增加了反向(Reverse AJAX)功能,通过反向AJAX功能,服务器端的JavaBean对象可以将取得的数据直接推送到指定的客户端页面,写到指定的HTML元素内,这个过程不需要客户端进行任何的请求操作
Sec-WebSocket-Key:是一个Base64 encode的值,这个是浏览器随机生成,验证是否能和服务器端进行 WebSocket通信。...---- 这里简单了解下web的发展史,在2005年以前如果想要在一个页面显示显示不同的内容,或者说页面内跳转,只能是通过点击然后路由跳转,在ajax诞生之后网页开始变得动态了。...但是所有的 HTTP通信还都是由客户端控制的,这就要需要"定期轮询"与服务器端进行通信。 ajax轮询: 浏览器在特定的时间给服务器发送请求,查看服务器是否有信息数据,类似下图: ?...但是 ajax轮询 这种方式增加了网络开销与服务器端资源消耗,是一种低效的实时交互方案。还有一点就是客户端总是主动的,服务器端总是被动的接收请求并响应数据。 WebSocket 解决的问题 1....WebSocket 适用的应用场景,需要提供多个用户相互交流的功能,或者需要展示经常变动的数据,例如: 社交类应用、股票类应用、在线教育类应用,等应用场景。
领取专属 10元无门槛券
手把手带您无忧上云