comet(http 请求长连接) 之 ajax 长查询 简单实现。

阅读更多
这几天看到几篇关于http 长连接的文章,之前做过一个简单WebIM 采用ajax定时查询,效率一般,请求一多 iis 日志每天大概有80M左右。在线人数在40人左右(基本和挂QQ一样)。

今天特意研究了一下http 的长连接。有了一点点成果。现放出来大家一起讨论一下。

不清楚长连接请点这里。

1.客户端请求



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 list = new List();//信息列表 

        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,Comet,QQ,IIS,thread)