`
HuNanPengdake
  • 浏览: 235811 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Ajax长连接方式

阅读更多
很多程序都可以通过socket来实现长连接,实现消息的即时推送。但由于http请求一般都是短连接,一次请求结束,就会断开与服务器的连接,服务器不能主动推送数据到客户端,而只能由客户端发起请求,但有些时候,需要在web上实现即时的消息传输,比如即时聊天、股票动态信息等。
    在Ajax技术被发掘以前,在网页上实现无刷新的即时聊天,似乎是很困难的事情,但由于Ajax技术的兴起,人们可以进一步来挖掘它的潜力了,象gmail、google gtalk的网页版,都是Ajax长连接的重要应用,目前很多网站可能都已经在使用长连接技术了,比如SNS网站的即时聊天。


1.Ajax短连接方式实现网页聊天
模型图:

常规的短连接模式下,都是通过不间断刷新请求实现的,比如每间隔3秒发送一次Ajax请求,3秒更新一下数据,然后就这样不间断刷新下去,直到用户关闭网页。这样所带来的弊端就是,如果用户很长时间都没有操作,每次刷新都不会返回新数据,这样就造成了资源的浪费,很多请求都是没必要的;另外一个问题,就是用户的输入,跟数据的请求不是同步的,会造成一定的信息延迟。

2.Ajax长连接方式实现网页聊天
模型图:


Ajax长连接模式,它的刷新是根据数据来执行的,如果有新数据返回,接收并解析显示数据,然后发起新的Ajax请求,如果一段时间内,用户没有操作,则连接处于睡眠状态,一直等待有用户输入或者请求超时,然后发起下个Ajax请求。这样做的好处是,每个消息都会即时推送到客户端,延迟极少;另外每次请求都是有意义的,与短连接对比,效率要高很多。但对于一个用户量很多,并且操作非常频繁的网站,长连接模式也会出现过于频繁的刷新问题。目前IE对于HTTP连接数是有限制的,每个网页只能同时进行两个长连接,第三个长连接会被阻塞。

利用php在后台sleep,自己做了个模拟的程序,查看效果

      看了一下别人写的Ajax长连接聊天的案例,以php为例,基本上是在后台进行不间断的检测,如果有新数据就推送,如果没有新数据,就一直阻塞,直到30秒超时,然后客户端重新发起下一个请求。后台判断里重要的一行代码:usleep(10000); 就是暂停10毫秒,缓解一下CPU压力,个人感觉如果暂停100毫秒,时间延迟也是很难感觉到的。这种方法基本就是把前端的循环,搬到了后台,中间减少了网络传输的环节,如果是一个Ajax的即时聊天系统,要保存用户的聊天记录,那就需要跟数据库相结合,每秒10次以上的数据查询,这个与短连接比,必定加大了数据库的压力,具体怎么优化,这个应该是交给服务器端人员来处理了。

如果想要了解更多的内容请Google一下comet,或者看看这里(一个很不错的框架,Ajax Push Engine),这个网站有很多demo,效果很帅。



本文转自:http://www.itlearner.com/article/4844
分享到:
评论

相关推荐

    ajax长连接及demo

    ajax长连接及demo

    web即时聊天(ajax长轮询方式实现)

    在长轮询中,客户端发送一个Ajax请求到服务器,服务器保持这个连接打开,直到有新的消息时才返回,或者在超时后关闭连接,客户端收到响应后立即再次发起新的请求,形成一个持续的循环。 【Ajax技术】 Ajax的核心...

    Ajax Jsp 连接MySQL数据库

    在这个“Ajax Jsp 连接MySQL数据库”的主题中,我们将深入探讨如何在JSP页面上利用Ajax技术与后台MySQL数据库进行交互,同时处理多个Ajax请求。 首先,让我们了解基本概念。Ajax的核心是通过JavaScript向服务器发送...

    ajax实现服务器与浏览器长连接的功能

    AJAX技术通过以上方式实现了客户端与服务器端之间的异步通信,进而实现长连接的效果。不过,随着技术的发展,传统的AJAX技术也面临着一些新的挑战,比如实时性要求更高的场合(例如在线游戏、实时聊天等),可能需要...

    Ajax长连接项目案例

    所谓的长连接,就是不断去发送请求,把请求阻塞在服务器端,每次超过请求时间就去重新发送请求,保持连接,随时获取服务器端的响应的数据 项目案例: 代码如下: function connection(){ $.ajax({ type:”GET”, url:...

    AJAX 连接数据库实例

    接下来,我们将讨论如何使用AJAX连接到数据库。这里假设我们使用PHP作为后端语言,MySQL作为数据库。 **步骤1:创建HTML页面** 在前端,我们需要一个HTML页面来触发AJAX请求。这通常包括一个按钮或表单,用户点击后...

    php-Ajax长轮询

    长轮询是Ajax的一种变体,主要用于实现实时通信。在传统的Ajax请求中,客户端发送请求到服务器,服务器处理完请求后立即返回响应。而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到...

    ajax长连接式的浏览器、服务器的全双工通信框架.rar

    ajax 的全称是Asynchronous JavaScript and XML(异步的JavaScript 和 XML),其中,Asynchronous 是 异步 的意思,它有别于传统web开发中采用的同步的方式。 ajax所包含的技术 1.使用CSS和XHTML来表示。 2. 使用...

    基于Ajax长连接的J2EE浏览器服务器全双工通信框架设计源码

    该框架设计源码以Ajax长连接为核心,实现了J2EE浏览器与服务器之间的全双工通信,采用JavaScript、Java和HTML等多种语言编写,共包含35个文件,其中Java文件16个,JavaScript文件2个,XML文件2个,其他文件类型涵盖...

    php开发客服系统(持久连接+轮询+反向ajax) - php严程序

    用户端采用第二种方式:ajax持久连接 + 长轮询 ajax持久连接:文档加载完毕后(或其他时机),使用ajax请求一个php文件 被请求的php文件通过while(true)循环.迟迟不给apache返回数据的目的. 轮询指:请求服务器的时候....

    DWR 长连接方式上传图片

    在DWR中,长连接方式上传图片是一种优化的文件上传策略,它通过保持一个持久的HTTP连接来减少网络延迟,提高用户体验。 首先,我们需要理解DWR的工作原理。DWR允许JavaScript直接调用服务器端的Java方法,这些调用...

    ajax实现注册验证+数据库连接池

    传统的数据库连接方式是在每次请求时创建和关闭连接,这会消耗大量资源。而连接池预先创建一定数量的数据库连接,当需要时直接复用,用完后归还,而不是关闭。 1. **初始化**:启动时,连接池会预配置并保持一定...

    带数据库连接的AJAX表单验证实例PHP版

    带数据库连接的AJAX表单验证实例PHP版 一个带数据库连接的AJAX表单验证实例,运行于PHP环境,免费开源的程序,这意味着您可以在不用于商业目的的情况下对程序代码进行修改、使用和再发布。本例包括一个自定义的Ajax...

    C# ajax和数据库连接池小实例

    下面将详细探讨C#、Ajax以及数据库连接池的相关知识点。 一、C#与Ajax的结合使用 1. C# Web应用基础:C#通常与ASP.NET框架一起使用,构建服务器端的Web应用。通过编写C#代码,开发者可以处理HTTP请求,生成动态...

    ajax开发实例,设置中文,连接oracle数据库

    在本实例中,我们将学习如何使用Ajax进行开发,特别是在设置中文环境并连接Oracle数据库方面。首先,我们需要创建一个JavaScript函数,这个函数将负责触发Ajax请求。通常,我们会使用`XMLHttpRequest`对象或者现代...

    Ajax-database.zip_ajax连接数据库

    总结来说,"Ajax-database.zip_ajax连接数据库"这个资源提供了一个关于如何使用Ajax技术与数据库进行交互的完整示例。它涵盖了前端的Ajax请求、后端的数据库连接和查询,以及数据的传输和显示。这对于学习和实践Web...

    C#服务器推技术(http长连接)的应用实例

    2.不再定时不断请求Http请求,降低服务器资源消耗,可参考Taobao核心系统团队博客《http长连接200万尝试及调优》; 3.TX微博等很多应用均采用服务器推技术,你还在用Ajax? 网上关于服务器推技术的文章多,但关于.net...

    c#长连接案例服务器推进器

    服务器推进,也称为Comet技术,是长连接的一种实现方式,它允许服务器主动向客户端推送数据,而不需要客户端发起新的HTTP请求。这对于实时性要求高的应用至关重要,因为它打破了HTTP协议的请求-响应模式。 三、C#...

Global site tag (gtag.js) - Google Analytics