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

Ajax 长连接

    博客分类:
  • Ajax
 
阅读更多

1.客户端请求

<script type="text/javascript"> 

var HttpRequest; 

function CreateXmlHttpRequest()
{
   if(window.XMLHttpRequest)
   {
      HttpRequest=new XMLHttpRequest();
   }
   else if(window.ActiveXObject)
   {
      HttpRequest=new ActiveXObject("MICROST.XMLHTTP");
   }
} 

function Send()
{
    document.getElementById("test").innerHTML="等待返回信息";
    CreateXmlHttpRequest();
    if(HttpRequest!=null)
    {
       HttpRequest.onreadystatechange=ShowMessage;
       HttpRequest.open("GET","Handler.ashx?name="+escape("leon")+"&m"+Math.random());
       HttpRequest.send();
    }
} 

function ShowMessage()
{
    if(HttpRequest.readyState==4&&HttpRequest.status==200)
    {
        if(HttpRequest.responseText.length>0)
        {
           alert(HttpRequest.responseText);//收到信息
           //如果有信息返回 重新发送请求 递归
           Send();
        }
    }
} 

</script> 

 

2.服务的如何hold请求

public class Handler : IHttpHandler
{
    private bool ok = true; 

    public void ProcessRequest(HttpContext context)
    {
        ok = true;
        while (ok)//超时设置ok为false即可
        {
            //循环检查是否有信息存在
            Check(); 

            //防止循环太频繁 
            System.Threading.Thread.Sleep(1000);
        }
    } 

    private void Check()
    {
        List<message> list = new List<message>();//信息列表 

        string str = "";
        lock (im.mlist)
        {
            if (im.mlist.Count > 0)
            {
                foreach (message m in im.mlist)
                {
                    if (m.username == HttpContext.Current.Request["name"].ToString())
                    {
                        list.Add(m);
                        str = m.messagecontent;
                        break;
                    }
                } 

                if (list.Count > 0)
                {
                    foreach (message m in list)
                    {
                        im.mlist.Remove(m);
                    }
                } 

                //收到信息 循环结束
                ok = false; 

                if (list.Count > 0)
                {
                    //推信息
                    HttpContext.Current.Response.Write("收到信息:" + str);
                }
            }
        }
    } 

    public bool IsReusable
    {
        get
        {
            return false;
        }
    } 

}

 

分享到:
评论

相关推荐

    ajax长连接及demo

    ajax长连接及demo

    Ajax长连接项目案例

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

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

    Ajax工作原理是提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当...

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

    在浏览器与服务器之间建立长连接是AJAX技术的一个重要应用。 服务器与浏览器建立长连接的目的在于实现服务器能够主动向浏览器推送数据。这通常用于实时数据更新、聊天室、股票价格显示等场景。在传统的Web应用中,...

    Ajax Jsp 连接MySQL数据库

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

    AJAX 连接数据库实例

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

    php-Ajax长轮询

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

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

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

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

    二:ajax持久连接 + 长轮询 客服端采用第一种方式:iframe + 服务器推技术 思路: 1:新建comentbyiframe.php 该用文件使用while(true)一直连接到服务器不断开. 如果在while的过程中查到了新数据.使用ob_flush推给...

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

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

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

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

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

    【标题】:“Ajax实现注册验证+数据库连接池” 在现代Web开发中,用户交互体验的提升至关重要。Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下更新部分网页内容,大大提升了用户...

    Ajax-database.zip_ajax连接数据库

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

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

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

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

    2. `ajaxpush.aspx`:可能是客户端页面,通过Ajax技术与服务器交互,实现长连接和数据推送。 3. `Default2.aspx`、`Default2.aspx.cs`:默认的ASP.NET页面和对应的后台代码文件,可能用于展示或测试长连接效果。 4. ...

    一个简单都php ajax程序 连接数据库,查询、修改、删除

    在这个项目中,我们有一个基于PHP和AJAX的简单程序,它连接到PostgreSQL数据库,实现了用户登录以及数据的查询、修改和删除功能。以下是对这些知识点的详细说明: 1. PHP(Hypertext Preprocessor): PHP是一种...

    PHP+Ajax实现在线聊天长轮询

    本示例“PHP+Ajax实现在线聊天长轮询”旨在教你如何创建一个简单的实时聊天系统,使得用户无需刷新页面就能接收到新消息。 **一、Ajax基础** Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况...

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

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

Global site tag (gtag.js) - Google Analytics