我有一个在 localhost:8080 端口上运行的 tomcat 服务器 当我对服务器运行多个线程/请求时,每隔一段时间,对这些请求的响应就会发生冲突。我的意思是,如果 Alice 和 Bob 发出请求,Alice 可能会得到属于 Bob 的响应,反之亦然。此外,每隔一段时间,Alice 和 Bob 可能都会收到 Alice 的请求。请参见下面的示例。注意:这只发生在 3% 的时间里,但是 2000 多个请求中有 3% 是很多失败的。
- 爱丽丝->发送请求1
- 鲍勃->发送请求2
- 爱丽丝->接收响应2
- 鲍勃->接收响应1
我的问题是,为什么会发生这种情况,有没有办法解决它?
也许我缺少配置中的某些内容。
这是一些更多信息,以便我可以涵盖基本问题。我正在使用 Jersey api 客户端与服务器(com.sun.jersey.api.client.WebResource)交谈,该服务器应该是线程安全的(至少它声称是这样)
这不是线程问题。1)我已经验证每个线程都有自己的客户端实例。2)我同时运行多个进程(都是单线程的)并发现相同的结果。
我在服务器端用一个线程运行它们,但冲突仍然发生。
这是我的 catalina 配置(在 server.xml 文件中)
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="10" minSpareThreads="0" maxSpareThreads="5"
URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
根据我对 HTTP 的了解,每个请求都会打开(或重用)一个新端口。然后,服务器应该将响应发送到请求来自的确切端口。如果是这种情况,则不应发生冲突。