| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7614 人关注过本帖
标题:Socket.Listen的参数是做什么用的?
只看楼主 加入收藏
leilei88
Rank: 2
来 自:青岛
等 级:论坛游民
帖 子:217
专家分:27
注 册:2008-3-30
结帖率:100%
收藏
 问题点数:0 回复次数:1 
Socket.Listen的参数是做什么用的?
Socket.Listen的参数是做什么用的?看了半天也没看懂。。
这个值一般设置多少?
搜索更多相关主题的帖子: Socket Listen 参数 
2010-11-26 22:49
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
Socket.Listen方法用于将 Socket 置于侦听状态
backlog(楼主说的参数)
挂起连接队列的最大长度。
backlog 参数指定队列中最多可容纳的等待接受的传入连接数。若要确定可指定的最大连接数,要参照 MaxConnections 值
程序代码:
// create the socket
    Socket listenSocket = new Socket(AddressFamily.InterNetwork,
                                     SocketType.Stream,
                                     ProtocolType.Tcp);

    // bind the listening socket to the port
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
    IPEndPoint ep = new IPEndPoint(hostIP, port);
    listenSocket.Bind(ep); 

    // start listening
    listenSocket.Listen(backlog);
考虑默认值为5明显应该是MaxConnections 。
后面的测试验证,就是这个参数非常的致命,在修改为200之后,tps直接*2。
返回来分析这个参数,默认最多容许有5个空闲长连接。考虑到100个工作线程,正常应该长连接数目也在100附近,考虑每次请求都要先申请一个连接,用完之后再放回,100个工作线程同时操作,很有可能同时将超过5个的连接返还给连接池。如果服务器简单的判断说多于5个连接然后就立即close并释放长连接,那么就会出现一方面连续释放长连接,一方面因为连接数不够不停的创建新的长连接。
换言之,当100个线程并发在连接池中进行申请连接/返还连接的过程中,连接池内的可用连接数是时刻变化的,实际的数目会有大的波动。而默认的最大空闲参数过小(默认才5)使得这个波动有极大的几率突破限制,从而造成连接池进行不必要的释放所谓过多的“空闲”连接。


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-11-29 08:31
快速回复:Socket.Listen的参数是做什么用的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020340 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved