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;)这句话都没用,这到底是为什么?这句代码我在控制台里面测试绝对是可以用的,所以有知道的人请在评论区告诉我,不甚感激。
c# 模拟并发请求 ,只能并发2个连接。的更多相关文章
- Oracle EBS 清除并发请求和(或)管理器数据 请求
请求说明:该请求可以清除平时提交的请求日志文件.并发管理器的日志文件.报表输出文件.并发请求和并发管理器进程的历史记录信息. 参数说明:(红色标注字段为必输项)1. 实体:ALL:清除请求历史记录. ...
- 查看http的并发请求数及其TCP连接状态
统计80端口的连接数据 netstat -nat | grep -i "80" | wc -l 统计httpd协议连接数 ps -ef | grep httpd | wc -l 统 ...
- PHP实现并发请求
后端服务开发中经常会有并发请求的需求,比如你需要获取10家供应商的带宽数据(每个都提供不同的url),然后返回一个整合后的数据,你会怎么做呢? 在PHP中,最直观的做法foreach遍历urls,并保 ...
- CountDownLatch和CyclicBarrier模拟同时并发请求
有时候要测试一下某个功能的并发能力,又不要想借助于其他测试工具,索性就自己写简单的demo模拟一个并发请求就最方便了.如果熟悉jemter的测试某接口的并发能力其实更专业,此处只是自己折腾着玩. Co ...
- java中如何模拟真正的同时并发请求?
有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...
- 对tomcat7模拟并发请求及相关配置参数的含义
这里的并不是真正的并发请求,因为for循环是间隔10毫秒,并且线程初始化也需要时间的,到真正执行http请求的时刻是不确定的. tomcat 的运行状态可以在webapps下的manage项目查看, ...
- Asp.net并发请求导致的数据重复插入问题
前段时间工作中,有客户反应了系统中某类待办重复出现两次的情况.我核实了数据之后,分析认为是并发请求下导致的数据不一致性问题,并做了重现.其实这并不是一个需要频繁调用的功能,但是客户连续点击了两次,导致 ...
- asp.net c# 通过消息队列处理高并发请求(以抢小米手机为例)
网站面对高并发的情况下,除了增加硬件, 优化程序提高以响应速度外,还可以通过并行改串行的思路来解决.这种思想常见的实践方式就是数据库锁和消息队列的方式.这种方式的缺点是需要排队,响应速度慢,优点是节省 ...
- JMeter100个线程竟然只模拟出1个并发
线程组,是说到 JMeter 会第一时间想到的东西,也是我认为 JMeter 最难理解的知识点.因为项目让你做个压测,首先就是要考虑并发,用 JMeter 就是用多线程 来模拟多并发.但在看到线程组编 ...
随机推荐
- ZYNQ block design警告:[BD 41-968] AXI interface port /axi_lite4 is not associated to any clock port. It may not work correctly.
前言 在Block design中引出AXI接口给外部,检查设计告警如下: [BD 41-968] AXI interface port /axi_lite4 is not associated to ...
- RabbitMQ实战场景(一):异步记录用户操作日志
传统的项目开发中业务流程以串行方式,执行了模块1—>模块2–>模块3 而我们知道,这个执行流程其实对于整个程序来讲是有一定的弊端的,主要有几点: (1)整个流程的执行响应等待时间比较长; ...
- Java面向对象程序设计----接口
接口:接口是一套规范.一个比抽象类更抽象的类. 接口中只能写抽象方法.接口中没有构造函数接口中的变量:public Stratic final接口怎么来使用(implements)实现接口 接口语法: ...
- MySQL Lock--MySQL加锁学习2
准备测试数据: ## 开启InnoDB Monitor SET GLOBAL innodb_status_output=ON; SET GLOBAL innodb_status_output_lock ...
- 过滤器实现Token验证(登录验证+过期验证)---简单的实现
功能:登录验证+过期验证+注销清除cookie+未注销下关闭或刷新浏览器仍可直接访问action概述:token只存在客户端cookie,后端AES加密+解密+验证,每一次成功访问action都会刷新 ...
- mysql遇到时区问题的坑(Java解决方案)
最近项目遇到一个坑,就是server和db之间存在时区问题,本人的db是utc时间, 可以使用代码设置时区来解决,本人这里使用joda三方包,joda蛮好用的,具体用法这里不做详细描述. 先引入pom ...
- [bluez] linux下蓝牙鼠标的延迟问题
引言 现在的便携设备,接口越来越少了.所以我们没有理由不用蓝牙鼠标.高大上也不贵. 蓝牙4.0之前,蓝牙设备的问题是特别费电.蓝牙4.0之后省电的要命,我的上一个鼠标Microsoft Designe ...
- js基础知识3
系统对话框方法 警告框 window.alert('mcw'); 效果显示 确认框 var a = window.confirm('你确定要离开网站?'); console.log(a); 如果点击确 ...
- C#屏蔽Alt+F4组合键
在开发的软件不希望用户关闭的情况下,或者我们不想用户回到桌面,这时候我们就需要屏蔽windows键,或者Alt + F4 键等. //1.将窗体的属性KeyPrieview设置为true //keyp ...
- 【转】Http和Https下的cookie的写入问题
网站https:// 可以登陆, 但是切换到http的时候不能登陆. 原因是:https访问的时候,返回的cookie设置了secure=1, 切换成http访问的时候, 这个时候不能操作那个cook ...