winsock连接过多会出错!这种情况一般怎么办
winsock连接过多会出错!这种情况一般怎么处理
'/
Dim myIndex As Long
myIndex = wskMO.Count + 1
'//
Load wskMO(myIndex)
'//
wskMO(myIndex).Accept requestID
showinfo "连接 " & myIndex & "响应 "
====================
这部分代码:在请求连接过多的时候就会出错 "40006 ",我想知道这部分你们一般怎么处理的,前提,不能放弃对方连接.因为如果对方连接不成功.他们不会再连接和发送信息..而这些信息!我又要确保都能收到!谢谢
------解决方案--------------------
Load wskMO(myIndex)
可以在加载新的Winsock时处理,不用每次都加载新的,可以使用已加载而未使用的winsock。
------解决方案--------------------
收到连接请求后,现在已加载的Winsock中找没有使用的,如果找到直接用,找不到再加载新的。
如果一个连接断掉后也不要立即把Winsock给卸载掉,而是留着备用。
查找闲置Winsock的时候不要用遍历,否则效率会很低。简单点的算法是建一个闲置列表,未使用的都往这张表里放,查找的时候取第一个就行,要使用的话就从表里拿掉,用完后回收到这张表里。
------解决方案--------------------
建一个闲置列表的办法是个不错的主意,只是从节省资源与安全的角度考虑,闲置Winsock,还是立即卸载为好,不然恶意程序用一个Socket不停地连接再断开,很容易就会让服务端当机!
闲置列表只需保存已Unload掉的Index,查找的时候取第一个,Load它即可。若没有闲置的再加载新的。要注意:新的Index可不是wskMO.Count + 1,应该是wskMO.ubound + 1
连接过多的问题,可用wskMO.Count来判断,若超过你认为的限制,放弃Accept或连接后立即发送错误信息再断开都行。除非你想做一个大型服务程序,连接数一般是够用的,理论上一台机器可支持3万多客户端的同时连接。
闲置列表用一个集合对象来管理会很方便。
------解决方案--------------------
mark
------解决方案--------------------
这个问题。。。。我也遇到过
用一个闲置列表可以解决部分问题,但是如果太多请求还是不行的
只能帮你 up了
'/
Dim myIndex As Long
myIndex = wskMO.Count + 1
'//
Load wskMO(myIndex)
'//
wskMO(myIndex).Accept requestID
showinfo "连接 " & myIndex & "响应 "
====================
这部分代码:在请求连接过多的时候就会出错 "40006 ",我想知道这部分你们一般怎么处理的,前提,不能放弃对方连接.因为如果对方连接不成功.他们不会再连接和发送信息..而这些信息!我又要确保都能收到!谢谢
------解决方案--------------------
Load wskMO(myIndex)
可以在加载新的Winsock时处理,不用每次都加载新的,可以使用已加载而未使用的winsock。
------解决方案--------------------
收到连接请求后,现在已加载的Winsock中找没有使用的,如果找到直接用,找不到再加载新的。
如果一个连接断掉后也不要立即把Winsock给卸载掉,而是留着备用。
查找闲置Winsock的时候不要用遍历,否则效率会很低。简单点的算法是建一个闲置列表,未使用的都往这张表里放,查找的时候取第一个就行,要使用的话就从表里拿掉,用完后回收到这张表里。
------解决方案--------------------
建一个闲置列表的办法是个不错的主意,只是从节省资源与安全的角度考虑,闲置Winsock,还是立即卸载为好,不然恶意程序用一个Socket不停地连接再断开,很容易就会让服务端当机!
闲置列表只需保存已Unload掉的Index,查找的时候取第一个,Load它即可。若没有闲置的再加载新的。要注意:新的Index可不是wskMO.Count + 1,应该是wskMO.ubound + 1
连接过多的问题,可用wskMO.Count来判断,若超过你认为的限制,放弃Accept或连接后立即发送错误信息再断开都行。除非你想做一个大型服务程序,连接数一般是够用的,理论上一台机器可支持3万多客户端的同时连接。
闲置列表用一个集合对象来管理会很方便。
------解决方案--------------------
mark
------解决方案--------------------
这个问题。。。。我也遇到过
用一个闲置列表可以解决部分问题,但是如果太多请求还是不行的
只能帮你 up了