如何做到控制连接数量,并且可以在服务器压力减轻后按个处理缓冲池
比方控制最大连接数量10
超过的就加入缓充池,一旦连接数量10个中有部分关闭之后,就授受缓充池中的任务
相当于如果同时100个人请求网站,服务器可能会好多连接请求失败,而用了缓充池后
客户端就会显示类似正在请求的状态,并没有断开,只是说图片显示慢一点了

解决方案 »

  1.   

    假如同时有300个人访问,只能同时接受100个的访问,另外200个就加入缓充池,一旦这100个中的某个访问完成,就自动从缓冲池中继续接受访问。相当于服务器设置个类似IIS的服务端程序,让客户端超出访问量时排队下载网页
      

  2.   

    VB做出来的代理速度有点慢,gzip也是个麻烦
      

  3.   

    慢点没事,只要数据完整就行了
    GZIP这些不用理会
    其实就是三个控件
    server,中间,接收外网数据
    客户端(如IE)连接server,然后分配给 中间的winsock(数组控件)
    accept request再中间控件收到数据时,用“接收外网数据”控件连接到相应的主机,收到数据时,发回给中间件
    中间在通道关闭时做相应的处理,已经有相应的程序,但是经常会造成好几个连接端一直没关闭,有时网页显示不完整,像是淘宝商品页的描述经常出不来
    有经验的可以留下Q号,有过相关经验的人可以付费请帮帮我完善
      

  4.   

    不用考虑用VB做这种事情了,不现实,这种东西从架构和效率上VB很难做到令人勉强接收的效果。
    而且,http代理我就用VB实现过,从控件到自己用API异步的方式都试验过。最终的效果是会丢失很多
    连接,比如单纯测试一两个或是多个连接是正常的,但是直接把IE的代理设置为自己的程序,访问
    内容不多的本地iis服务网页没什么问题,但是如果网页中有很多图片和外部js或css,就经常丢失
    元素,因为VB的速度和效率跟不上,所以不会过得了抗压测试。
    而且,作为服务程序,在架构上也是很讲究的,即使是用VC来写,在架构上如果弄不好,同样会效率
    跟不上,为了能更好更快的的实现服务,不单是讲究架构,还得讲究具体技术和过程,稍微不注意,
    弄出来的东西就会有很多缺陷。
    目前在 windows 中比较成熟的方案是用 IOCP,但 VB 要用这种架构架构并能做到稳定,可以说比用
    VC 来写难度更大,时间更久,技术要求更高,甚至要对整个VB、COM、WIN32体系有很具体的认识和经
    验才能这样实施,但最后即使弄出来,效率还是比VC的低,稳定性也是一直是个问号。
      

  5.   

    serverSocket
    中间socket
    连外部socket
    嗯,我刚试过了,用的是3个控件,找到了点问题中间socket和连外部socket连上时,如果连外部socket close了,但是中间SOCKET是负责发数据给请求方的,必须等发送完成才能CLOSE,否则就会造成数据发送不完整
    sendcomplet这个事件很重要,但是还没弄好缓充池
      

  6.   

    远程客户端IE》》请求网页上多个图片的数据连接到代理服务器软件的:serverSocket
    分发请求给多个中间件:中间socket中间socket转发get之类的HTTP头到“连外部socket”
    建立连接到请求所对应的网站及端口,发送GET或POST等请求连外部socket收到真实的网页数据,然后用“中间socket”转发二进制图片等数据给客户端IE
      

  7.   

    有没有用VB写个WEB服务器的呢
      

  8.   

    静态web用Delphi写几行代码就可以搞个出来了。
      

  9.   

    缓冲池这块相对来说比较简单些。当然做得完美还是需要花一些功夫。我觉得从请求然后答复这块,VB效率应该没有问题吧?因为确实不需要处理很多数据。只是一些Session这些的处理比较头痛一些,比如用户验证码可能永远不会正确。
    缓冲池我有简单的例子,如果有需要可以交流下。
      

  10.   

    我写过呀,呵呵,还支持PHP和CGI接口呢。最后感觉简直就是个垃圾,没有任何实用价值,只能作为技术研究过程之一而已,而且最终感觉这样做根本只是绕了次远路而已。当你去了解NT服务、IOCP、ISAPI、GZIP这种WEB有关的技术之后,你就会发现,VB要完成这些技术的整合会很无力,而且这个过程很浪费时间。
      

  11.   

    当然,FTP、SMTP、POP3、WHIOS、P2P等等我都有用VB去实现过,甚至是客户端都有在弄,包括浏览器的自己解码。最后总结的是,客户端VB可以勉强用一下,但服务器端用VB去弄就是浪费时间。
      

  12.   


    绿豆真厉害啊,有没有vb写的抓数据包的代码?用VB写抓包,一种方法是直接做个代理服务器,就像我这样的,然后把收到的数据进行分析,GET是请求,返回的内容也要保存,由一个REQUESTID作为标识,这个我的代理工具就能办到,只要IE的代理设成我的程序端口就行了另一种方法就是直接用网卡封包抓取的模式,那样的话乱七八糟的流量全要分析,不只是HTTP信息,还有聊天等信息,加密的一大片,哪个是哪个软件上调用过来的也不知道。
      

  13.   

    我写过呀,呵呵,还支持PHP和CGI接口呢。最后感觉简直就是个垃圾,没有任何实用价值,只能作为技术研究过程之一而已,而且最终感觉这样做根本只是绕了次远路而已。当你去了解NT服务、IOCP、ISAPI、GZIP这种WEB有关的技术之后,你就会发现,VB要完成这些技术的整合会很无力,而且这个过程很浪费时间。并不会浪费时间,只是说VB6是太早的东西,很多功能还没有,如果是VB。NET 2008 2012之类,或许本身就内置了自动生成GIF图片,PNG,也可能几句话就能出来一个代理服务器,像是GZIP等解码,系统本身都自带了,可能一个函数就搞定,而且VB6,很多功能都要写一个到几个模块文件才能实现。
    怎么样实现代理登陆时的验证呢?这个我试过用HTTP协议登陆路由器,这个登陆时就有一个账号和密码框要加密到HTTP HEADER才能登陆
      

  14.   


    前面我是每次收到数据包都去转换成TXT查找是否有**字符串,比方是HOST,以此认为是HTTP请求,比方一个POST有二进制数据,用了30次分包才传完,这样就要解析30次,很费时间,后来我加了个变量来识别,比方第一次时找到了HTTP HEADER头,后面看这变量值,接收到数据就只管转发不再解析,一旦这个GET请求发送到外网,并且返回了有效的HTM数据,这时就又把变量清0,在这个控件没有关闭前,还会收到GET请求,这时就又分析HTTP头,要是发现了完整的HTTP头,就关闭SOCKET,重新建立连接。有一个问题,收到GET请求时,SOCKE3还没有连接成功到目标网站,这时可能IE请求收到多次数据包(比方是POST),这时数据就需要先存到缓存变量里,并且要一段一段的混在一起。
      

  15.   

    只为抓包的话,HOOK NtDeviceIoControlFile
      

  16.   

    按你的理论,哪还用自己去写代码,直接用现成的软件就可以了,最多用一下子类化处理一下UI或帮他封个壳,这样做最省事。再说了,也没那么多现成的模块给你用,不要想得太美好了。至于你的问题,登录密码部分很简单,一看就知道是MIME编码,你自己抓个包解个码看看就知道他的格式了。只要按照用户名:密码的格式编码就解决了。至于处理连接交换那块,更加简单,就是些基本的逻辑问题,不管一次通讯会产生多少次事件,你只要明确 HTTP 头是以换行符号与冒号分割数据就可以很容易识别呀,只以“行”为单位处理 HTTP 头,以两个换行符号为基础识别 HTTP 头段落,其余的全是POST数据,这种简单的字符串与参数的识别过程,在VB里实现可以说再简单不过了,如果你觉得这种逻辑处理过程复杂,建议你去参考一下单片机上处理复杂的字符串命令是如何做的。单片机里通常只有128个字节的变量空间,最多再来个1K的扩展RAM,但如果说让单片机来分析HTTP头信息,可以说就那128个字节的变量空间都搓搓有余,这是为什么呢?应为处理过程的逻辑理念问题。先不说你可以在Windows用单片机的方式来做这种逻辑处理,就VB而言网上也很多这类分析处理过程,你可以去参考的呀。
      

  17.   

    VB对二进制数组,如何查找比较方便?
    比方原来的内容是大小写混合的,但是想只用小写去查,如何处理?
    用INSTRB比较慢吧,有什么更好的函数或API?如果对一个数组,去除中间一段内容,或者是替换中间一段内容,有什么好方法?
    dim bt() as byte
    redim bt(3000)
    想把BT(500-2000)的数据替换成别的,或者删除,要如何写代码呢?
      

  18.   

    Quote: 引用 21 楼 SupermanKing 的回复:
    好的,谢了,现在就是用这方法了,第一次是检查文个头VBCRLF+VBCRLF,然后后面就只要转发就行了,大不了加个数据缓存到变量的方法,这个用什么编程模式简单呢?
    我现在是用DIM A AS Collection 
    DIM B AS 数据类型(一个*.cls)文件存结构数据
    然后a.add b,就是用这方法,总觉的这样比较慢吧?
      

  19.   

    我这两天也在玩这个东西。
    我的思路是这样的。
    外网服务器上运行 S  监听两个端口“1800”和“123”   “1800”是给C连接  “123”给外网服务器IE连接
    内网运行C  由C主动连接外网S的端口”1800“建立连接 ,当然C也会有监听端口 ”80“当需要工作的时候  内网C 连接外网S”1800”端口,连同通后. IE访问外网 “123“端口,就可以看到内网C”80“的端口。
    数据传输已经可以了,就是不能传输图片等文件,只能传输文本。
      

  20.   

    数据传输已经可以了,就是不能传输图片等文件,只能传输文本。我也是花了一周才弄好的,支持图片,HTM,支持上传文件等,我QQ1085992075