现在想做一个代理的功能,接收HTTP请求,然后转发,现在是收到一个请求就起一个线程处理,虽然也用了线程池管理线程,但是如果一个用户在不停的点击功能,不停的发请求,这边的线程很快就不够用了,一般网络编程是怎么处理这种问题的,能不能之前的请求都抛弃,只响应最后一个请求?

解决方案 »

  1.   

    一个请求就起一个线程,是玩具的做法,真正的HTTP是TCP短连接,你又只是转发,不需要做处理,最好的做法是在单一的线程内做事情,而不是起线程,.
    线程不会加速你的程序的.当然了,也不是不可以起线程,你可以在每一个线程安置一个消息队列,视消息队列的盈满程度,决定是不是要使用另外一个线程.
      

  2.   

    我想,你应该制定一些规则了!,比如设置每个IP最高的同时连接数
    设置每个IP下个连接的延迟数,类似于Thread.sleep(); 总之,然后后面的等待,
    如果超过等待队列,就直接返回ERROR.
      

  3.   

    请参考tomcat的thread的配置部分。呵呵,这些都是比较成熟的配置了。
      

  4.   

    你可以把它们的请求信息放到一个映射里面
    它们的IP做为一个键,而请求的内容做为值
    因为Map是唯一的键,所以后续的请求会自动覆盖以前的请求,这样你取出来的就一定是最后的请求了