62,046
社区成员
发帖
与我相关
我的任务
分享
/// <reference path="jquery-1.3.2.min.js" >
$(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();
}
});
});
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);
asyncResult.ClientID = context.Request.UserHostAddress;
String content = context.Request.Params["content"];
//向Message类中添加该消息
Messages.Instance().AddMessage(asyncResult.ClientID, 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 string ClientID { get; set; }
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; ;
}
}