2 qq 27497911 qq_27497911 于 2016.02.27 09:49 提问

.net comet在网上下载了一套简单的源码却一直调试不出来 可能问的问题比较基础 各位大神见谅

在网上查了半天消息推送 最后下载了一套comet+jquery简单源码示例 代码很简单就两个类
然而我初学这个东西 一直没有调试成功 看不大懂 求大神指导

下面贴源码 首先是config

 <httpHandlers>
      <add path="comet_broadcast.asyn" type="AsnyHandler" verb="POST,GET"/>
    </httpHandlers>

然后是AsnyHandler类的代码

 using System;
using System.Collections.Generic;
using System.Web;
using System.Threading;

/// <summary>
/// Summary description for AsnyHandler
/// </summary>
public class AsnyHandler:IHttpAsyncHandler
{
    public AsnyHandler()
    {
    }

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
    {
        //myAsynResult为实现了IAsyncResult接口的类,当不调用cb的回调函数时,该请求不会返回到给客户端,会一直处于连接状态
        myAsynResult asyncResult = new myAsynResult(context, cb, extraData);
        String content = context.Request.Params["content"];

        //向Message类中添加该消息
        Messages.Instance().AddMessage(content, asyncResult);
        return asyncResult;
    }

    #region 不必理会

    public void EndProcessRequest(IAsyncResult result)
    {

    }

    public bool IsReusable
    {
        get { return false; ; }
    }

    public void ProcessRequest(HttpContext context)
    {
    }
    #endregion
}
public class myAsynResult : IAsyncResult
{
    bool _IsCompleted = false;
    private HttpContext context;
    private AsyncCallback cb;
    private object extraData;
    public myAsynResult(HttpContext context, AsyncCallback cb, object extraData)
    {
        this.context = context;
        this.cb = cb;
        this.extraData = extraData;
    }
    private string _content;
    public string Content { 
        get {return _content;}
        set{_content=value;} 
    }

    #region IAsyncResult接口
    public object AsyncState
    {
        get { return null; }
    }

    public System.Threading.WaitHandle AsyncWaitHandle
    {
        get { return null; }
    }

    public bool CompletedSynchronously
    {
        get { return false; }
    }
    public bool IsCompleted
    {
        get { return _IsCompleted; }
    }
    #endregion

    //在Message类中的添加消息方法中,调用该方法,将消息输入到客户端,从而实现广播的功能
    public void Send(object data)
    {
            context.Response.Write(this.Content);
            if (cb!=null)
            {
                cb(this);
            }
            _IsCompleted = true; ;
    }
}

Messages类的代码

 using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for Messages
/// </summary>
public class Messages
{
    //记录所有请求的客户端
    List<myAsynResult> clients = new List<myAsynResult>();

    #region 实现该类的单例
    private static readonly Messages _Instance = new Messages();
    private Messages()
    {
    }
    public static Messages Instance()
    {
        return _Instance;
    }
    #endregion

    public void AddMessage(string content,myAsynResult asyncResult)
    {
        //当传入的内容为"-1"时,表示为建立连接请求,即为了维持一个从客户端到服务器的连接而建立的连接
        //此时将该连接保存到 List<myAsynResult> clients中,待再有消息发送过来时,该连接将会被遍历,并且会将该连接输出内容后,结束该连接
        if (content=="-1")
        {
            clients.Add(asyncResult);
        }
        else
        {
            //将当前请求的内容输出到客户端
            asyncResult.Content = content;
            asyncResult.Send(null);

            //否则将遍历所有已缓存的client,并将当前内容输出到客户端
            foreach (myAsynResult result in clients)
            {
                result.Content = content;
                result.Send(null);
            }

            //清空所有缓存
            clients.Clear();
        }
    }
}

前端请求代码

 $(document).ready(function () {
    function send() {
        //向comet_broadcast.asyn发送请求,消息体为文本框content中的内容,请求接收类为AsnyHandler
         $.post("comet_broadcast.asyn", { content: $("#content").val() });
        //清空内容
        $("#content").val("");
    }

    function wait() {
        $.post("comet_broadcast.asyn", { content: "-1" },
         function (data, status) {
             var result = $("#divResult");
             result.html(result.html() + "<br/>" + data);
             //服务器返回消息,再次立连接
             wait();
         }, "html"
         );
    }

    //初始化连接
    wait();
    $("#btnSend").click(function () { send(); });
    $("#content").keypress(function (event) {
        if (event.keyCode == 13) {
            send();
        }
    });
});

这是最初的源码 在本地调试的时候会提示找不到comet_broadcast.asyn这个文件,
源码中也确实没有这个文件 这也是我最大的疑问 然后网上查了下 有人说把后缀改为.ashx也就是一般处理程序 不知道这样对不对 却不知道这个里面的代码改怎么写 怎样去调用AsnyHandler类里面的BeginProcessRequest方法 囧 这对只会一些基础代码的我来说确实有点难度 求哪位大神能够指导一下 谢谢了

1个回答

s_tranquility
s_tranquility   2016.02.27 10:24

囧 没有人啊 0.0自己顶顶

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Comet HTTP服务器推送框架之Pushlet
Pushlet是一个开源的 Comet 框架,Pushlet 使用了观察者模型:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。
.net网上选课系统源码
vs2005+sql2005 .net简单网上选课系统源码,系统分管理员,老师,学生,公有四模块
Comet入门及最简单的Java Demo
在浏览网页的时候,如果有新的消息,如何接收到?HTTP协议不能由服务器主动给客户端发送消息。1、刷微博、逛论坛贴吧,想看最新的信息怎么办?F5刷新一下就OK了!2、上面一种方式是被动的,如果用户不去刷新页面,就看不到消息。如何让服务器主动推送消息给客户端浏览器,一种方式是用setInterval来Ajax定时刷新。这样一来,刷新操作不是由用户来操作,而是由浏览器去自动发起请求,用户无法察觉到,给用
.net彩票源码 网上彩票投注站 绿色版
晓风彩票投注站.net彩票源码中心总站可以帮助每一个代理商开通渠道业务拓展平台,用于代理商对自己下线的渠道进行管理的,实现代理商的在线申请、审核,代理商的彩票网站的开通、关闭;代理商的销量的统计、报表查询、代理商互动资讯管理等功能。实现对代理商的授权与控制。通过晓风彩票代购合买系统的网络推广功能,可以极大提高了官方网站的流量与网站推广的途径。 本系统由晓风彩票软件有限公司独立开发,拥有软件自主知识产权,是国家授权有专利的正规彩票网站,是国内彩票在线合买代购网站系统中彩种最全、开走势图表最全、玩法最全、栏目最全、功能最强的网上彩票投注站。 由于对彩票投注网站资质和监管的力度与难度的问题。当一些彩票网站的购彩的彩民到达一定的流量的时候,资金管理就会出现风险。对于每天销量达到10以上的站点,他们常见托管的会员帐户资金应该在200万左右。如果出现站长携款潜逃的情况,那么彩民的利益无法得到保障。 彩票代理商管理模块是以建立一个以彩票中心官方网站为核心的彩票网络销售体系,整个模块可以建立一个四级的分销体系。分别为总站(中心或都核心合作企业)、高级代理商(合作企业或者专营店)、普通代理商(部份专营店)、投注站业主。 详见官网介绍:http://www.szbgw.cn/solution.htm 官网下载地址:http://www.szbgw.cn/muban.htm
C#网上订餐系统
开发环境VS2010,SQL2008,包含注册短信验证,登入系统(管理员,客户),可修改客户密码,分管权限。删除添加订单。
JSP管理系统的完整的源码,调试运行的大体步骤
2010年06月03日 星期四18:59 1、把系统拷到tomcat的webapps下面去 2、把数据库创建起来 3、修改数据库的配置文件,然后启动TOMCAT -------- 这个项目就可以跑起来了 如果要改这个项目什么的,那就按照以下步骤: 1、打开eclipse,新建一个WEB项目,然后把文件拷到刚刚你指定的文件夹去; 2、在ECLIPSE里面配置好
websocket与comet的性能对比
http://chenkangxian.iteye.com/blog/2268133 博客分类:  webjava并发 websocketcomet性能web即时交互  对于comet长连接来说,服务端如有内容需要发送给客户端时,服务端将原本占用的连接进行回复,此时原有的连接断开,重新发起长连接,直到服务端有内容响应。从每次消息发送到收到服务端消息应答,平均
那些年我做的毕业设计
想到那里写到那里吧,从毕业到现在断断续续也有十多年了吧,从自己的设计,到帮助同学做的,多是有偿做的,这么多年总觉得是一种不好的事情一直也没有记录,随着年龄大了,渐渐明白这个世界真的有好坏之分吗,什么是好,什么是坏。 1、当年自己做的毕业设计,选了一个自认为高大上的题目基于WMI的Window监控系统,也就是说可以看硬盘,CPU、网络的使用情况有点像现在的Window 资源管理器的功能。当时觉得挺
简单购物车模块源码(基于.net平台开发)
主要功能 电子商务网站中购物车功能是否合理及安全,将直接影响网站的的发展。本实例中允许游客浏览商品,并查看商品信息,但不允许购物。只有登录的用户才可以进行购物。 注意事项 (1)用户登录后才能进入后台,否则无法对后台进行操作。 (2)首页面中,单击该页面下“进入后台”超链接,进入后台主页面。 单击“继续购物”导航按钮,继续购买商品。 (3)单击“结账”导航按钮,对当前购物车中的商品进行结算。 (4)单击“清空购物车”导航按钮,将当前购物车中的商品全部清除。 (5)单击“进入后台”超链接,对商品信息进行添加操作
强烈推荐:完整的C#实例源代码之 网上商城购物系统
强烈推荐:完整的C#实例源代码系列(内附详细说明文档):<br><br>适合C#和SQL2005入门者练习。 <br><br>内附数据库安装录像(FLASH格式)<br><br>应网友要求,因为原来发布的资源点数过高,不适合CSDN新人下载,而CSDN又无法修改资源的点数,故该系列共8套系统全部免费再次发布,如下:<br><br>财务凭证管理系统<br>房屋中介系统<br>高校教师档案管理系统<br>固定资产管理系统<br>库存管理系统<br>企业客户资源管理系统<br>商品进销存报表系统<br>网上商城购物系统<br><br>所有这8套系统都可以在我的资源里找到。