日期:2014-05-18  浏览次数:21086 次

不管多少次多少线程: request.GetResponse().都使用同一个连接同服务器建行通讯,怎么样强制他分开建立连接呢?(解决即赚50元话费)
不管多少次多少线程: request.GetResponse().都使用同一个连接同服务器建行通讯,怎么样强制他分开建立连接呢?


在一般机上request.GetResponse().默认是分开建立连接的。特别是多线程应用下。而极个别机上。不管开多少线程。需要多少次同服务器建行通讯。request.GetResponse()都只使用一个连接。(即CMD下用netstat -n查看到只有一个 ESTABLISHED状态的。)

用多线程socket建行对话是正常的,都会开好多个连接,而唯独这个request.GetResponse()在极个别机上无论开多少线程都只使用一个连接(同一个程序大多数机上测试正常),按道理应该建立相应线程数量的连接才对的....这问题现象好像对这个GetResponse()进行了lock一样!

========================================
整个程序功能虽然正常完成。但速度奇慢。调试发现各线程就像用了lock锁一样按顺序排队使用同一个 连接。
线程顺序如下(一共开了100个线程,等了五分钟才出来下面这些,其他正常电脑5分钟可以输出N次了。。。网络环境是一样的,就是操作系统可能哪设置不一样):
 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

------解决方案--------------------
记得微软系统有一个叫什么系统连接数.....默认的IE链接服务器只能同步开5个线程,这个个数也是和OS的版本不同而不同...你的问题会不会和IE这样的问题一样呢....
还有LZ在提问题的时候最好把问题说清楚..你指的那个别电脑的配置怎么样?是什么OS....线程貌似和CPU有很大的联系...
祝LZ问题早日解决...嘎嘎...
------解决方案--------------------
试下request.GetResponse().Close();
看看是不是多个线程阻塞的原因。
------解决方案--------------------
好像只允许两个链接吧

这里有个案例,就是说这个事的:http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx
------解决方案--------------------
RFC 2616, the RFC for Hypertext Transfer Protocol -- HTTP/1.1.

"Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion." 


解决办法:
 在machine.config的<system.net>节找到下面的节点,将autoconfig 改成true

<ProcessModel>
<autoconfig = "true">
</ProcessModel>

------解决方案--------------------
非要做的话,自己用TCP模拟HTTP好了~,想开几个就开几个~
------解决方案--------------------
你的request是哪里产生的

应该在各个线程中独立产生的局部变量request,才会使用多个连接吧
------解决方案--------------------
HttpWebRequest的KeepAlive 属性试过没有?
设为FALSE看看