`
rcfalcon
  • 浏览: 227965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

与comet的一次亲密接触——基于ajax的http的长连接技术

阅读更多

今天研究试验了一下“服务器推”的comet技术。

 

之前上GOOGLE GMAIL时也很好奇它的那个即时聊天框,居然可以在WEB页面中做到类似于QQ的聊天框,很有意思。

最近才知道这个技术一直被WEB技术探讨,——WEB服务器如何向指定的客户端推送数据?

因为HTTP传输机制的限制,一次HTTP请求就完整的包括了TCP建立、TCP传输 和TCP关闭。我们在一个页面被访问完毕之后,这次连接

就完全释放。那么服务器就无法再与这个客户端通信了。

 

由于页面超时时间一般为30秒,服务器也无法抓住一次HTTP请求不放开,所以这个问题一直在WEB开发技术上作为一个热点问题存在

 

直到AJAX的出现,我们出现了以AJAX为基础的HTTP长连接技术:comet

 

今天我们就来体验一下它功能!

 

我们来实现一个简单的功能,服务器端向指定客户端推送网页。


客户端使用一个ID登录之后,服务器端可以向指定ID推送网页,客户端收到之后应该显示出来。

 

我先在网上找了一个著名的comet教程,comet-ajax的一个聊天室示例程序,在此基础上改。

 

看了一下它的基本思想是:

 

客户端上来就创建AJAX长连接,有人发言之后,服务器端修改一个txt文件,该文件修改导致启动 ajax回馈,json格式回写,客户端

AJAX得到数据,调用javascript脚本呈现。

 

我们需要改成:


客户端上来通过ID登录,启动AJAX长连接,服务器端选择ID,输入URL,点击推送后,修改该txt文件,包括指定用户ID和URL,启动

ajax回馈,客户端得到数据,判断是否推送给本机,若是,则调用javascript在iframe中呈现该页面。

噼里啪啦很简单的敲了几行代码,就修改成功了!

 

看看我们的成果

 

 

同时推到4个用户。

 

重要代码:

 

<?php
	require_once('connectdb.php');
	$id = $_GET['id'];
	$exec = "update user set online=1 where id like $id";
	mysql_query( $exec );
	echo "your id is [".$id."]<br>";
?>

<div id="content">
</div>


<mce:script type="text/javascript" src="prototype.js" mce_src="prototype.js"></mce:script>
<mce:script type="text/javascript"><!--
var Comet = Class.create();
Comet.prototype = {

  timestamp: 0,
  url: './backend.php',
  noerror: true,

  initialize: function() { },

  connect: function()
  {
    this.ajax = new Ajax.Request(this.url, {
      method: 'get',
      parameters: { 'timestamp' : this.timestamp },
      onSuccess: function(transport) {
        // handle the server response
        var response = transport.responseText.evalJSON();
        this.comet.timestamp = response['timestamp'];
        this.comet.handleResponse(response);
        this.comet.noerror = true;
      },
      onComplete: function(transport) {
        // send a new ajax request when this request is finished
        if (!this.comet.noerror)
          // if a connection problem occurs, try to reconnect each 5 seconds
          setTimeout(function(){ comet.connect() }, 5000); 
        else
          this.comet.connect();
        this.comet.noerror = false;
      }
    });
    this.ajax.comet = this;
  },

  disconnect: function()
  {
  },

  handleResponse: function(response)
  {
    var s = response['msg'];
    var id = s.substr(0, 1);
    var url = s.substr(1,s.length-1);
    
    var url = "http://"+url;
    if( id == <?php echo $id ?> )
    	$('content').innerHTML = '<iframe height="100%" width="100%" src="'+url+'" mce_src="'+url+'"/>';
  },

  doRequest: function(request)
  {
    new Ajax.Request(this.url, {
      method: 'get',
      parameters: { 'msg' : request }
    });
  }
}
var comet = new Comet();
comet.connect();
// --></mce:script>

 

分享到:
评论

相关推荐

    Comet:基于 HTTP 长连接的“服务器推”技术 (实例)

    Comet 是一种用于 Web 应用程序的异步通信技术,它通过 HTTP 长连接实现服务器向客户端推送数据,而不是传统的由客户端发起请求获取数据。这种技术解决了传统Web应用中实时性不足的问题,使得Web应用能够实现类似...

    CSharp HTTP长连接(Comet)

    在IT行业中,HTTP长连接(也称为Comet技术)是一种用于实现服务器向客户端实时推送数据的方法,常用于构建实时交互的应用,如聊天室、股票报价、在线游戏等。C#作为.NET框架的主要编程语言,提供了丰富的工具和技术...

    Comet:基于_HTTP_长连接的“服务器推”技术

    Comet技术的核心是使用HTTP长连接,即客户端与服务器之间维持一个持久的连接状态,服务器可以随时通过这个连接将数据推送给客户端。相较于传统短连接,长连接可以显著减少每次数据交换所需的开销,提高效率。 #####...

    Comet:基于 HTTP 长连接的“服务器推”技术

    Comet:基于 HTTP 长连接的“服务器推”技术

    Comet:基于HTTP长连接的“服务器推”技术[收集].pdf

    长轮询是Comet的一种实现方式,利用AJAX技术,客户端向服务器发送请求并保持连接打开状态。服务器在接收到请求后,不会立即响应,而是等待有新的数据可用时才返回响应,关闭连接,客户端在接收到数据后再次发起新的...

    Comet(Http长连接)

    Comet是一种Web开发技术,它通过持久化HTTP连接实现了服务器向客户端的实时数据推送。在传统的HTTP交互模式中,浏览器向服务器发送请求,服务器响应后关闭连接,这种模式不适合需要实时更新的应用场景。而Comet则...

    CometAsync_net:C#实现基于http长连接“服务器推”-Comet技术

    C#实现基于http长连接“服务器推”-Comet技术 很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新、发送请求。 本项目基于 AJAX 的长轮询方式实现。 ...

    Java 实现 Comet 长连接,服务器主动发送消息给客户端

    Comet 是一种基于 HTTP 的持久化连接技术,允许服务器在客户端保持一个打开的 HTTP 连接,直到有新的数据需要发送或者连接超时。这种模式突破了传统的 HTTP 请求-响应模式,使得服务器可以主动向客户端推送数据,...

    comet的ajax实现

    comet两种实现之一的ajax实现,内部有源代码,这是一个聊天室的例子

    ajax长连接及demo

    ajax长连接及demo

    asp.net基于http的长连接项目

    在ASP.NET中实现基于HTTP的长连接,通常涉及到一种名为“Comet”或“Reverse AJAX”的技术。这种技术允许服务器向客户端推送数据,而无需客户端不断地发起新的HTTP请求,从而实现了类似于即时通讯(IM)系统的实时...

    基于长连接的简易聊天室jQuery+.net 2.0 Comet

    基于长连接的简易聊天室jQuery+.net 2.0 Comet Comet练手,尚有不少bug,还未实现维护用户列表功能 是长连接的不是轮询方式 升级版本 http://download.csdn.net/source/2216847

    asp.net comet例子

    描述中提到,这个例子基于Ajax的长连接技术,这意味着它使用Ajax来创建一个持久的HTTP连接,而不是传统的请求-响应模式。Ajax允许在不刷新整个页面的情况下与服务器交换数据,使得用户界面更加动态和实时。然而,...

    Ajax和Comet技术总结

    Comet是一种用于实现实时双向通信的技术,与传统的Ajax请求不同,Comet允许服务器向客户端推送数据,而不是仅由客户端发起请求。这在实时应用如聊天、股票报价或在线游戏等场景中特别有用。Comet有多种实现方式,...

    web推送 comet技术

    Comet技术是一种基于HTTP长连接的Web实时通信技术,它允许服务器向客户端主动推送数据,而无需客户端发起新的请求。这种技术打破了传统的HTTP请求-响应模型,极大地提升了Web应用的实时性和交互性,尤其适用于股票...

    基于comet4j的简易聊天

    总结来说,"基于Comet4j的简易聊天"项目是一个利用Comet4j框架实现的实时聊天应用,它利用HTTP的持久连接技术实现实时通信,为用户提供即时消息传递的功能。在实现过程中,开发者需要理解Comet4j的工作原理,设置...

Global site tag (gtag.js) - Google Analytics