• c# 模拟并发请求 ,只能并发2个连接。


    使用 HttpWebRequest 模拟并发请求的时候,发现不管怎么提高thread 的数量,都没用,服务器端用计数器看到的都是2个连接,见下图(关于计数器怎么开,百度)

    然后搜了一下,发现需要在app.config 中配置如下

    <system.net>
    <connectionManagement>
    <add address="*" maxconnection="1000000"/>
    </connectionManagement>
    </system.net>

    或者在程序开始并发调用之前加入   System.Net.ServicePointManager.DefaultConnectionLimit = 1000;(这个数值是最大并发数)

    经过我测试,这两个方法都可以让并发数如期并发,实验方式是先写了一个控制台程序A。在里面并发出100个线程,看我站点A的IIS连接数,不加这句代码怎么样都是2(我怀疑控制台程序被识别成一个浏览器客户端,只能是2而不能是10),加了代码,则是我并发数的连接数。

    问题是解决了,但是我却有一个新的疑问了,既然这样子,那是否意味着,假设我有一个 web 项目的某个页面A,正在使用 httpwebrequest 去访问别人的接口,我假设接口地址是 api.baidu.com,如果有50个人同时访问了我的页面A,而我web.config中没有按上面配置,岂不是我的页面A只能同步处理2个人的请求了吗?

    然后我马上去实践,搭建了一个环境,随意搞了一个页面A,在页面A中用httpwebrequest去访问我临时搭建的站点B(相当于上文提到的 api.baidu.com),我发现站点A上的连接数能上去,而站点B的连接数一直是10。

    这代表页面A上的并发请求被限制在了10(据说windows server系统限制是10,普通win7 xp限制是2。我站点A是建立在windows server2008上的)

    然后,按上文提到的改config或者加代码,就能提高并发数,所以,我先在页面A的page_load中加入了 System.Net.ServicePointManager.DefaultConnectionLimit = 1000; 重新访问一次页面A(相当于让站点A先编译被IIS加载),然后开始用控制台并发了100个请求,发现站点B的计数器上,一直都是10,没有变化。。。。。所以,搞不懂这问题在哪里,然我又尝试去掉了这代码,在web.config中加入了 上文提到的配置节点,再并发100个,这次站点A的计数器和站点B的计数器都上升到了100。,第一个图是同步上升,站点A的web.config配置了上文说的代码

    下面一个图是站点A的web.config取消了配置上面提到的代码的计数器

     实验结果是出来了,我得出的结论是,如果我站点某个页面有模拟请求其他接口的地方,必须要在我站点的web.config里面配置如上代码(甚至连在page_load中加 System.Net.ServicePointManager.DefaultConnectionLimit = 1000;)这句话都没用,这到底是为什么?这句代码我在控制台里面测试绝对是可以用的,所以有知道的人请在评论区告诉我,不甚感激。

  • 相关阅读:
    [Java]lambda表达式
    [设计模式]访问者模式
    【Java】基本数据类型
    【JavaWeb】防止表单的重复提交
    [Java]异常在项目中的使用
    Java容器-个人整理1
    【MyBatis-Spring】Mybatis和并入Spring框架
    python 正则表达式模块——re 知识点小结
    关于使用python批量操作网络设备(交换机,路由器)的知识点小结
    GitHub 基础常用命令用法
  • 原文地址:https://www.cnblogs.com/Jerseyblog/p/11454490.html
Copyright © 2020-2023  润新知