gpt4 book ai didi

java - 在使用spring-integration创建的Socket上设置哪些超时?

转载 作者:行者123 更新时间:2023-12-03 11:52:57 26 4
gpt4 key购买 nike

我有两个bean创建到服务器的客户端套接字连接:AbstractClientConnectionFactoryTcpOutboundGateway

服务器提供1分钟的超时。

问:我必须在bean上设置哪些超时,以便spring/java在服务器超时之前不会终止连接?

可以使用以下属性:

factory.setSoTimeout();
gateway.setRequestTimeout();
gateway.setRemoteTimeout();

从客户的角度来看,哪个超时是正确的设置?还是我应该将它们全部设置为等于 60000L

我问是因为我现在才使用 factory.setSoTimeout(60000L),并且在10秒后获得套接字超时。所以也许我必须另外设置网关超时?

我还发现 gateway.setRemoteTimeout(60000L)仅在设置时才防止超时。因此,也可以同时设置此值(尽管我不明白为什么必须配置两次超时)是正确的。

问题仍然是 .setRequestTimeout()是什么。

最佳答案

factory.setSoTimeout();



SO超时是在套接字本身上设置的;如果在此时间内未收到任何答复,则读取器线程将获得异常。如果我们最近没有发送消息(表示我们正在等待答复),则说明套接字已关闭。如果我们最近确实发送了一条消息,我们将再等待一个套接字超时,此后套接字将关闭。

gateway.setRequestTimeout();



仅当工厂 singleUse为false(表示共享的单个连接)时,这才适用。如果另一个请求正在处理中,这是我们等待访问套接字的时间。由于TCP没有用于请求/回复关联的自然机制,因此我们不能有2个(或更多)未完成的请求,因此第二个请求必须等到第一个请求完成。如果 singleUse为true,则每个请求都会使用一个新的套接字,因此不需要这样做。 CachingClientConnectionFactory提供了一种使用共享套接字池的机制。同样,此超时不适用(但是,如果所有套接字都在使用中,则池有一个超时)。

gateway.setRemoteTimeout();



这是网关本身等待答复的时间。如果到期,则关闭套接字。

SO超时和remoteTimeout有效地做同样的事情;只是具有不同的实现。

您可以将两者都至少设置为期望请求所花费的时间,也可以将SO超时设置为默认值(无穷大)。

关于java - 在使用spring-integration创建的Socket上设置哪些超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46192422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com