关于IIS里的网站连接池的问题.

by_封爱 2013-01-22 11:48:33
我做了一个网站(SiteA),首页有有请求推送部分的代码.

如果我把这个代码注释掉,那么网站一直正常运行.

如果没有被注释,那么网站运行一天(其中有很多人登陆),那么网站只能打开登陆页面,进不去.也没任何报错

这个问题 就是把连接池(appA)删了 在新建一个连接池(appB) 把网站SiteA的连接池指向appB 就好用了.

或者第二天自己就好了

但是我也不能总这么干啊..

出现这个问题 是不是推送部分的代码导致连接池满了?我该怎么解决?

是在连接池里设置什么回收的?还是代码写
如果回收了 会不会导致session失效?我的session是在StateServer里的

...全文
1038 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2013-01-30
  • 打赏
  • 举报
回复
另外客户端请求失败的情况,不要立即请求服务器,因为可能造成浏览器CPU过高。
showjim 2013-01-30
  • 打赏
  • 举报
回复
我说一下我做推送的各个环节,仅供参考。 1.长连接域名与主域名不同(最好是泛域名解析),因为浏览器对于域名连接数有限制(比如Chrome现在是6个),否则用户多开几个页面浏览器就卡住了。 2.不要使用ajax的POST,应该使用动态加载脚本,否则有的浏览器会显示页面加载中的状态。 3.长连接采用异步模式,因为同步模式可能导致工作线程数过多。 4.长连接超时检测(比如一分钟),防止僵死链接的累积。
宝_爸 2013-01-30
  • 打赏
  • 举报
回复
这个不叫连接池,叫Application Pool.
空格键 2013-01-30
  • 打赏
  • 举报
回复
引用 4 楼 diaodiaop 的回复:
JavaScript code?123456789101112131415161718192021222324252627282930<script language="javascript" type="text/javascript"> $(document).ready(function () { //加载时间 ……
这个是个死循环,如果用户不关闭页面,一直运行,在加上用户多的话,程序池不爆才怪啊。
空格键 2013-01-30
  • 打赏
  • 举报
回复
引用 7 楼 diaodiaop 的回复:
引用 6 楼 blue_apple2006 的回复:去掉你的wait(),用setInterval(); 这样就是轮询了? 但是这样子目测不行啊..我是推送 如果我推的那个时候 你没有连接 客户端怎么取数据?? 看下我发的http://bbs.csdn.net/topics/390346423 差不多就是这个意思
楼主思路有问题,你的事BS 程序,不开浏览器,你推送也没用啊。 还是用js 定时查询吧
ycproc 2013-01-30
  • 打赏
  • 举报
回复
看看IIS B的连接池的配置,设置的自大连接数和A是不是一样的。
by_封爱 2013-01-30
  • 打赏
  • 举报
回复
-1的确请求服务器了
//当传入的内容为"-1"时,表示为建立连接请求,即为了维持一个从客户端到服务器的连接而建立的连接        
//此时将该连接保存到 List<myAsynResult> clients中,待再有消息发送过来时,该连接将会被遍历,并且会将该连接输出内容后,结束该连接
看到这2句话了吧
by_封爱 2013-01-30
  • 打赏
  • 举报
回复
引用 20 楼 ThinkRicher 的回复:
...
是聊天的 我也说了 请求-1的时候 就表示连接,如果不是-1 就是表示有人说话(msg) 那么把msg发送到各个浏览器做处理. 现在问题就是玩一会 就爆了 访问不了了 当下的别的页面 也访问不了 就是这个问题 该如何优化代码 或者如何解决 是从代码入手? 还是IIS? 还是配置文件? 还是.....???
空格键 2013-01-30
  • 打赏
  • 举报
回复
引用 18 楼 diaodiaop 的回复:
Quote: 引用 13 楼 ThinkRicher 的回复: ... Quote: 定时不行吧 就好比 你聊天 你能用定时? 都是实时的啊 就是一直连接 如果不是-1了 就....
你的问题估计是IIS 连接数满了
空格键 2013-01-30
  • 打赏
  • 举报
回复
引用 18 楼 diaodiaop 的回复:
Quote: 引用 13 楼 ThinkRicher 的回复: ... Quote: 定时不行吧 就好比 你聊天 你能用定时? 都是实时的啊 就是一直连接 如果不是-1了 就....
你是要实时聊天?还是只是获取一个信息? 获取信息的话,js 定时隔几秒请求一下服务器端(setInterval(wait, 5000);),够快了吧, 还有你的-1 只是在服务端做个标志,但你的客户端还是在不断的请求服务器呢.....
by_封爱 2013-01-30
  • 打赏
  • 举报
回复
[quote=引用 13 楼 ThinkRicher 的回复:] ... [quote] 定时不行吧 就好比 你聊天 你能用定时? 都是实时的啊 就是一直连接 如果不是-1了 就....
luobing261314 2013-01-29
  • 打赏
  • 举报
回复
LZ你请求推送的是什么东西哇 有没有一直发送是循环的程序或者在访问数据库的时候连接没有及时关闭???
ltcszk 2013-01-29
  • 打赏
  • 举报
回复
服务器端的过期策略呢? 我的comet是用cathe做的,过期时自动中止请求
by_封爱 2013-01-29
  • 打赏
  • 举报
回复

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就保持连接 如果是别的 才发送到客户端 怎么解决连接池满的问题?
by_封爱 2013-01-29
  • 打赏
  • 举报
回复
引用 9 楼 ltcszk 的回复:
服务器端的过期策略呢? 我的comet是用cathe做的,过期时自动中止请求
你说的那个 我没有听说过,看4#的代码以及8#的代码 就是客户端一直请求一个东西 其实一直是-1 请求到服务器了 -1不做任何处理 只是为了保持连接. 如果这个时候 不是-1 那么请求的 假设请求的是10001@你好 表示给10001发送你好这个记录 那么服务器会吧 这个数据 推给每一个客户端 然后客户端自己判断是不是发送给自己的而已. 现在就是 这个程序玩玩就坏了..现在问题好像是连接池满了的问题
引用 10 楼 luobing261314 的回复:
LZ你请求推送的是什么东西哇 有没有一直发送是循环的程序或者在访问数据库的时候连接没有及时关闭???
跟数据库没任何关系的
by_封爱 2013-01-26
  • 打赏
  • 举报
回复
引用 6 楼 blue_apple2006 的回复:
去掉你的wait(),用setInterval();
这样就是轮询了? 但是这样子目测不行啊..我是推送 如果我推的那个时候 你没有连接 客户端怎么取数据?? 看下我发的http://bbs.csdn.net/topics/390346423 差不多就是这个意思
blue_apple2006 2013-01-23
  • 打赏
  • 举报
回复
去掉你的wait(),用setInterval();
<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>
xyz378704 2013-01-23
  • 打赏
  • 举报
回复
老兄,不要专牛角尖,基本上是达不到你想要的效果(起码我是没想到有啥好的方案来接管这个SOCKET连接),果断换方案。轮询
yyl8781697 2013-01-22
  • 打赏
  • 举报
回复
LZ你请求推送的是什么东西哇 有没有一直发送是循环的程序或者在访问数据库的时候连接没有及时关闭???
Ruhee 2013-01-22
  • 打赏
  • 举报
回复
封神,我爱你 ,更爱你的菊花
加载更多回复(2)

62,263

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧