繁体   English   中英

当两个同时发出的请求来自同一个ip时,Tomcat的行为

[英]Tomcat's behaviour when two simultaneous requests come from same ip

当我尝试同时向我的服务器(http:// myserver)运行2个wget命令时,看起来tomcat会分配两个线程来处理它们。 但我相信当tomcat从同一个ip地址同时收到两个时,它不会创建一个新线程来处理第二个请求,因为它认为这两个请求来自同一个会话。

如果我想检查线程是否相同或不同,是否使用thread.getId()是唯一的方法? 我认为这个id可以重用于新线程。 除了threadid之外,是否存在检查其身份的线程的任何唯一属性?

我建议永远不要依赖线程来识别它们的来源。 关于线程没有Servlet规范保证 ,较新的Servlet规范实现使用NIO。 你在薄冰上滑冰。

Web服务器几乎总是将多个线程(或进程)分配给多个并发请求,因为客户端可以在不必等待每个响应时更快地工作。

但是,较新的服务器可能使用异步IO(nio),并且单个线程可以同时为许多客户端提供服务。

是的, Thread.getId()是一种识别线程的方法。

会话ID是用于标识来自单个客户端的请求的机制。

IP地址不是一个好方法,因为多个机器在隐藏在NAT后面时可以暴露相同的IP。

我相信Tomcat将始终创建一个新的执行线程,无论它是否来自相同的IP。 如果在特定IP上运行的客户端应用程序具有跨会话ID发送的机制,则Tomcat将简单地将相同的会话上下文与请求线程相关联[使其成为有状态]。

在你的情况下,你需要自定义wget以保持session-id [Tomcat web-app可能通过cookie或作为url参数发送它 - jsessionid ]。 然后,wget将需要将其与后续请求一起发回[url rewrite并包含jsessionid参数,或交换cookie]。 通过这种方式,Tomcat将能够处理来自唯一客户端实例的每个请求并将状态与其关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM