使用不同的Java库执行数百万个HTTP请求,使我陷入困境:
java.net.SocketInputStream.socketRead0()
这是native
功能。
我试图设置Apche Http Client,并RequestConfig
在所有可能的超时(我希望)上超时,但仍然
(可能无限)挂起socketRead0
。如何摆脱它们?
挂断率大约是每10000个请求〜1(对10000个不同的主机),并且可能会永远持续下去(我已确认线程挂起在10小时后仍然有效)。
Windows 7上的JDK 1.8。
我的HttpClient
工厂:
SocketConfig socketConfig = SocketConfig.custom()
.setSoKeepAlive(false)
.setSoLinger(1)
.setSoReuseAddress(true)
.setSoTimeout(5000)
.setTcpNoDelay(true).build();
HttpClientBuilder builder = HttpClientBuilder.create();
builder.disableAutomaticRetries();
builder.disableContentCompression();
builder.disableCookieManagement();
builder.disableRedirectHandling();
builder.setConnectionReuseStrategy(new NoConnectionReuseStrategy());
builder.setDefaultSocketConfig(socketConfig);
return HttpClientBuilder.create().build();
我的RequestConfig
工厂:
HttpGet request = new HttpGet(url);
RequestConfig config = RequestConfig.custom()
.setCircularRedirectsAllowed(false)
.setConnectionRequestTimeout(8000)
.setConnectTimeout(4000)
.setMaxRedirects(1)
.setRedirectsEnabled(true)
.setSocketTimeout(5000)
.setStaleConnectionCheckEnabled(true).build();
request.setConfig(config);
return new HttpGet(url);
OpenJDK
socketRead0
源码
注意:实际上,我有一些“技巧”-
如果请求正确完成,我可以安排.getConnectionManager().shutdown()
其他Thread
的取消操作Future
,但是它被取消了权限,并且杀死了整个HttpClient
请求,不仅是单个请求。
对于Apache HTTP客户端(阻止),我发现最好的解决方案是getConnectionManager()。并关闭它。
因此,在高可靠性解决方案中,我只计划在其他线程中关闭,如果请求未完成,我将从其他线程中关闭
问题内容: 我正在使用ColdFusion MX7对某些Java 6代码执行CFEXECUTE。 不幸的是,由于CF7在JDK 6下不起作用,所以我必须这样做。 我的问题是,如果在Java代码中发生异常,如果我在异常上调用a ,则CFEXECUTE命令会挂起。ColdFusion最终超时,但是Java进程继续在后台挂起。 我猜有一些障碍正在发生,但我似乎无法弄清楚为什么。 如果我不这样做,那么一切
我试图获取代码,以防止用户输入中包含数字。 基本上,我希望代码如下所示: 请求输入 关键是(为什么这不是一个重复的问题):我不能使用循环或其他我们还没有学会的语句。到目前为止,我们所学的唯一真正的语句是if/else/else if语句。这意味着我不能像一些答案所建议的那样使用for循环。虽然它们是很好的答案,而且很有效,但我会因为使用它们而失分。 我已经有了这个,但我不知道如何测试输入是否只包含
问题内容: 我正在使用ColdFusion MX7对某些Java 6代码执行CFEXECUTE。 不幸的是,由于CF7在JDK 6下不起作用,所以我必须这样做。 我的问题是,如果在Java代码中发生异常,如果我在异常上调用a ,则CFEXECUTE命令会挂起。最终超时,但是Java进程继续在后台挂起。 我猜有一些障碍正在发生,但我似乎无法弄清楚为什么。 如果我不这样做,那么一切正常。 异常是从Or
问题内容: 我有一个看起来像这样的东西: 我的问题是s在垂直方向上会变得很大。我只希望它们对于一行来说足够高,因为这是用户可以在其中键入的全部内容。按钮很好(它们不会垂直扩展)。 有什么方法可以防止s扩展?我是Swing的新手,所以如果我做的所有事情都太糟糕了,请告诉我。 问题答案:
如何实现防止XSS的Java ESAPI? 除了在构建路径中添加ESAPI jar之外,还需要其他配置吗? 提前感谢您的回答。
我有一个命名管道文件,如下所示: 当我在PHP中执行类似操作时: 它挂起(即永不返回)。是否有办法使此呼叫返回和/或超时? (编辑) 请注意,我希望一个进程以写权限打开此管道,另一个进程以读权限打开此管道。有人在向这根管子写信,而另一个人在从这根管子读书。问题是读者有时会挂在fopen()上——不管它成功与否,我总是想返回它。