Socket.Listen的参数是做什么用的

 我来答
j88r
推荐于2017-11-22 · 知道合伙人软件行家
j88r
知道合伙人软件行家
采纳数:33323 获赞数:46465
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
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)使得这个波动有极大的几率突破限制,从而造成连接池进行不必要的释放所谓过多的“空闲”连接。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式