原文是:http://www.codeproject.com/KB/aspnet/CometAsync.aspx

Asp.net环境下实现Comet就要用到   IHttpAsyncHandler接口

并实现其中的BeginProcessRequest和EndProcessRequest方法

BeginProcessRequest方法中的HttpContext包含了Response和Request对象,AsyncCallback用于异步调用结束,运行结束后需要返回一个IAsyncResult对象。

我在BeginProcessRequest函数中通过Request获取了一个名为ElementData的JSon字符串,并通过Element解析出用户名和在线状态。

CometAsyncResult构造函数只是简单的保存了HttpContext、AsyncCallback这两个对象,AddCometAsyncResult函数则实现了根据用户名获取全网中的留言信息、复制好友列表到聊天服务器、好友状态交换等业务逻辑。当然还有一点最为关键的,就是把用户名和HttpContext、AsyncCallback这两个对象对应起来,这样才能通过用户名来发送消息。当你完成这一切的时候,Comet模型就建立起来了,非常的简单。根据我测试windows2003+IIS6.0环境下可以同时4000-8000个链接,windows2008+IIS7.0环境下可达到15000个链接。

代码

using System;
using System.Data;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Threading;
using System.Web;
using PCBaseLib.Entity;
using CometAsync.Remoting;

namespace CometAsync.Comet
{
    public class CometAsyncHandler : IHttpAsyncHandler
    {
        #region IHttpAsyncHandler Members

public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {

//保存状态

CometAsyncResult result = new CometAsyncResult(context.Response, cb, extraData);
            Element Ele=null;
            if (context.Request.Form["ElementData"] != null)

Ele = new Element(context.Request.Form["ElementData"], true);
            else
            {
                Ele = new Element("test");
                Ele["From"] = "user" + HttpContextRemoting.UsersOnline.Count.ToString();
                Ele["State"] = "0";
            }
            result.AddCometAsyncResult(Ele["From"], Ele["State"]);

//  ok, return it
                return result;

}

public void EndProcessRequest(IAsyncResult result)
        {

}

#endregion

#region IHttpHandler Members

public bool IsReusable
        {
            get { return false; }
        }

public void ProcessRequest(HttpContext context)
        {
            throw new InvalidOperationException("ASP.NET Should never use this property");
        }

#endregion
    }
}

运行上述代码,请在web.config文件中加入httpHandlers节,注册访问页由你的类来处理,如下CometLink.ashx的处理函数、命名空间全名为:CometAsync.Comet.CometAsyncHandler

代码

   <httpHandlers>
      
      <add verb="GET, POST" path="CometLink.ashx" type="CometAsync.Comet.CometAsyncHandler, CometAsync" validate="false"/>
      <add verb="GET, POST" path="SendMessage.ashx" type="CometAsync.IM_Command.SendMessage, CometAsync" validate="false"/>
      <add verb="GET, POST" path="Join.ashx" type="CometAsync.IM_Command.Join, CometAsync" validate="false"/>
      <add verb="GET, POST" path="Agree.ashx" type="CometAsync.IM_Command.Agree, CometAsync" validate="false"/>
      <add verb="GET, POST" path="Login.ashx" type="CometAsync.IM_Command.Login, CometAsync" validate="false"/>
      <add verb="GET, POST" path="Refuse.ashx" type="CometAsync.IM_Command.Refuse, CometAsync" validate="false"/>
      <add verb="GET, POST" path="Presence.ashx" type="CometAsync.IM_Command.Presence, CometAsync" validate="false"/>
      <add verb="GET, POST" path="PresenceEx.ashx" type="CometAsync.IM_Command.PresenceEx, CometAsync" validate="false"/>
      <add verb="GET, POST" path="InfoSet.ashx" type="CometAsync.IM_Command.InfoSet, CometAsync" validate="false"/>
    </httpHandlers>

转载于:https://www.cnblogs.com/nevermad/archive/2010/04/21/1717013.html

开发分布式WebIm--3(Comet模型)相关推荐

  1. 【ChatGPT】各大互联网企业开发的类ChatGPT大模型

    各大互联网企业开发的类ChatGPT大模型 国际互联网公司 国内互联网公司 ChatGPT是由开放人工智能公司OpenAI开发的一款基于人工智能技术的聊天机器人,采用了大规模Transformer网络 ...

  2. PAI分布式机器学习平台编程模型演进之路

    摘要: 在云栖计算之旅第5期-大数据与人工智能大会上,来自阿里云大数据事业部的九丰分享了<PAI分布式机器学习平台编程模型演进之路>.他主要介绍了在集团中使用机器学习解决大数据问题时如何通 ...

  3. 笔记-信息系统开发基础-CMMI组织能力成熟度模型-阶梯式和连续式

    一.CMMI介绍 软件过程是软件生命周期中的一系列相关活动,即用于开发和维护软件及相关产品的一系列活动.软件产品的质量取决于软件过程,具有良好软件过程的组织能够开发出 高质量的软件产品.在软件过程管理 ...

  4. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  5. 分布式队列编程:模型、实战

    介绍 作为一种基础的抽象数据结构,队列被广泛应用在各类编程中.大数据时代对跨进程.跨机器的通讯提出了更高的要求,和以往相比,分布式队列编程的运用几乎已无处不在.但是,这种常见的基础性的事物往往容易被忽 ...

  6. 软件开发中的V字模型与W模型(使开发与侧试分离)

    ■前言 关于 W字模型,以前好像听过, 但是印象不深刻,几天有听别人说了一遍, 采用W字模型的主要目的是,测试与开发分离. ■瀑布开发中的V字模型 与 W模型 --- ■吐槽 ⇒ W字模型 很少有项目 ...

  7. ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以toad框架全流程讲解

    ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以toad框架全流程讲解 目录 基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以to ...

  8. 开发和设计实现LSTM模型用于家庭用电的多步时间序列预测

    鉴于智能电表的兴起以及太阳能电池板等发电技术的广泛采用,有大量的用电数据可供选择.该数据代表了多变量时间序列的功率相关变量,这些变量又可用于建模甚至预测未来的电力消耗. 与其他机器学习算法不同,长期短 ...

  9. OPhone 3D开发之解析渲染MS3D模型

    OPhone 3D开发之解析渲染MS3D模型 OPhone平台中,3D模块已经成为一项标准配置,而且随着硬件成本的降低,搭配硬件加速图形芯片 的移动设备也越来越多地出现在人们的视野当中,手机上的3D再 ...

最新文章

  1. 关键词排名下降怎么办-优八学院给你支招
  2. 活着不容易!几度被扼杀又雄起的NLP简史
  3. LetCode: 150. 逆波兰表达式求值
  4. model.fit() 参数详解【TensorFlow2入门手册】
  5. jMeter 打开项目时遇到错误消息 CannotResolveClassException: com.blazemeter.jmeter.RandomCSVDataSetConfig
  6. CSS中em和px单位的区别(转)
  7. Tosca 一不小心,我把那一排模块全关闭了,怎么打开
  8. tensorflow随笔——图像分类、检测,语义分割综述
  9. TD-LTE原理及关键技术个人笔记(1)TD-LTE概述
  10. OpenGL地球(自转+贴图)
  11. Rom制作工具让你一键root畅想未来
  12. Nature子刊 | AI驱动的药物开发是一把双刃剑
  13. nhibernate mysql配置_(转)NHibernate各种数据库配置写法
  14. uniapp开发微信小程序弹窗自用封装
  15. IdentityServer4实现Token登录以及权限控制
  16. persevere的用法_persevere是什么意思_persevere的翻译_音标_读音_用法_例句_爱词霸在线词典...
  17. FLUENT UDF案例一
  18. 江南大学计算机专硕学硕,考研择校分析 — 江南大学
  19. 十五分(java更新至2021年)
  20. 武汉计算机学校中专,武汉有哪些关于计算机中专学校

热门文章

  1. 大学python挂科补考_大一就挂科了,怎么办。感觉没了信心?
  2. iphone模拟器_应用日报 | Xcode 现身 5.4 英寸 iPhone 模拟器,和平精英上线特斯拉皮肤...
  3. java里的stream,Java中的Stream
  4. java1.6升级1.7_jdk从1.6升级到1.7可能会遇到的Version问题
  5. java与c基本数据类型比较,C++与Java基本数据类型比较
  6. python调用钉钉接口_关于钉钉接口使用Python,Post 500报错
  7. c语言标准库assert,C 标准库 - assert.h
  8. linux下串口抓包,Linux的串行端口 - wrtie()字节到目标设备通过串口
  9. 软raid1 重新同步_软RAID搭建基于linux系统搭建RAID5
  10. spring 全依赖