Tôi đang yêu cầu một khách hàng thực hiện yêu cầu tới một máy chủ có thể mất một thời gian để phản hồi.Thời gian chờ của máy chủ Restlet
Khi máy chủ muốn trả lời nó đã được ném ngoại lệ sau đây:
Kết nối bị hỏng. Nó có lẽ đã bị đóng bởi khách hàng.
org.eclipse.jetty.io.EofException tại org.eclipse.jetty.io.nio.SelectChannelEndPoint.blockWritable (SelectChannelEndPoint.java:435) tại org.eclipse.jetty.http.AbstractGenerator.blockForOutput (AbstractGenerator.java□12) tại org.eclipse.jetty.server.HttpOutput.write (HttpOutput.java:159) tại org.eclipse.jetty.server.HttpOutput.write (HttpOutput.java:101) tại mặt trời. nio.cs.StreamEncoder.writeBytes (StreamEncoder.java:221) tại sun.nio.cs.StreamEncoder.implWrite (StreamEncoder.java:282) tại sun.nio.cs.StreamEncoder.write (StreamEncoder.java:125) tại sun.nio.cs.StreamEncoder.write (StreamEncoder.java:135) tại java.io.OutputStreamWriter.write (OutputStreamWriter.java:220) tại java.io.Writer.write (Writer.java:157) tại org.restlet.representation.StringRepresentation.write (StringRepresentation.java:237) tại org.restlet.representation.CharacterRepresentation.write (CharacterRepresentation.java:76) tại org.restlet.engine.adapter.ServerCall.writeResponseBody (ServerCall.java:509) tại org.restlet.engine.adapter .ServerCall.sendResponse (ServerCall.java:453) tại org.restlet.ext.jetty.internal.JettyCall.sendResponse (JettyCall.java:312) tại org.restlet.engine.adapter.ServerAdapter.commit (ServerAdapter . java: 196) tại org.restlet.engine.adapter.HttpServerHelper.handle (HttpServerHelper.java:153) tại org.restlet.ext.jetty.JettyServerHelper $ WrappedServer.handle (JettyServerHelper.java:170) tại org.eclipse.jetty.server.AbstractHttpConnection.handleRequest (AbstractHttpConnection.java:452) tại org.eclipse.jetty.server.AbstractHttpConnection.content (AbstractHttpConnection.java:894) tại org.eclipse.jetty.server .AbstractHttpConnection $ RequestHandler.content (AbstractHttpConnection.java:948) tại org.eclipse.jetty.http.HttpParser.parseNext (HttpParser.java:943) tại org.eclipse.jetty.http.HttpParser.parseAvailable (HttpParser.java : 235) tại org.eclipse.jetty.server.AsyncHttpConnection.handle (AsyncHttpConnection.java:77) tại org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle (SelectChannelEndPoint.java:622) tại org .eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run (SelectChannelEndPoint.java:46) tại org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:603) tại org.eclipse. jetty.util.thread.QueuedThreadPool $ 3.run (QueuedThreadPool.java WEBC38) tại java.lang.Thread.run (Thread.java:722)
Khi điều đó xảy ra, khách hàng bị treo vô thời hạn.
Dưới đây là một ví dụ mã mà tái tạo các vấn đề:
Server side:
public static void main(String[] args) throws Exception {
Context context = new Context();
Server server = new Server(context, Protocol.HTTP, 8182, DummyServerResource.class);
server.start();
}
public class DummyServerResource extends ServerResource {
@Get
public String retrieve() throws InterruptedException {
Thread.sleep(1000 * 20);
return "Dummy";
}
}
phía Chủ đầu tư:
public static void main(String[] args) throws IOException, InterruptedException {
Context context = new Context();
context.getParameters().add("maxIoIdleTimeMs", "0");
Client client = new Client(context, Protocol.HTTP);
ClientResource cr = new ClientResource("http://localhost:8182");
cr.setNext(client);
Representation get = cr.get();
System.out.println(get.getText());
Thread.sleep(1000 * 50);
ClientResource cr2 = new ClientResource("http://localhost:8182");
cr2.setNext(client);
Representation get2 = cr2.get();
System.out.println(get2.getText());
}
gì đang xảy ra ở đây và làm thế nào để loại bỏ lỗi ?