62,243
社区成员




//当传入的内容为"-1"时,表示为建立连接请求,即为了维持一个从客户端到服务器的连接而建立的连接
//此时将该连接保存到 List<myAsynResult> clients中,待再有消息发送过来时,该连接将会被遍历,并且会将该连接输出内容后,结束该连接
看到这2句话了吧
using System;
using System.Collections.Generic;
using System.Web;
/// <summary>
/// Summary description for Messages
/// </summary>
public class Messages
{
/// <summary>
/// 记录所有请求的客户端
/// </summary>
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)
{
//content=content+clients.Count.ToString();
//当传入的内容为"-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();
}
}
}
如果为-1就保持连接 如果是别的 才发送到客户端 怎么解决连接池满的问题?
<script type="text/javascript">
$(document).ready(function () {
//加载时间
function wait() {
alert("1");
$.post("comet_broadcast.aspx", { content: "-1" },
function (data, status) {
//data格式为10004,10006@您有工作计划需要查阅@工作计划审批@../login.aspx
//分别为用户集合,描述,tab标题,路径 以下分别从消息里传入
var uid = data.split("@")[0];
var mg = data.split("@")[1];
var tab = data.split("@")[2];
var url = data.split("@")[3];
if (uid.indexOf($("#h1").val()) != -1 && data.indexOf("@") != -1) {
//有消息了,而且来自自己的
msgShow(mg, tab, url);
}
}, "html"
);
}
setInterval(wait, 5000);
});
</script>