ich tun Anfragen an einen Server einen Client habe, die eine gewisse Zeit zu reagieren nehmen könnte.Restlet Server-Socket-Timeout
Wenn der Server wollte es wirft die folgende Ausnahme antworten:
Die Verbindung unterbrochen wurde. Es wurde wahrscheinlich vom Kunden geschlossen.
org.eclipse.jetty.io.EofException bei org.eclipse.jetty.io.nio.SelectChannelEndPoint.blockWritable (SelectChannelEndPoint.java:435) bei org.eclipse.jetty.http.AbstractGenerator.blockForOutput (AbstractGenerator.java:512) bei org.eclipse.jetty.server.HttpOutput.write (HttpOutput.java:159) um org.eclipse.jetty.server.HttpOutput.write (HttpOutput.java:101) um sun. nio.cs.StreamEncoder.writeBytes (StreamEncoder.java:221) um sun.nio.cs.StreamEncoder.implWrite (StreamEncoder.java:282) um sun.nio.cs.StreamEncoder.write (StreamEncoder.java:125) bei sun.nio.cs.StreamEncoder.write (StreamEncoder.java:135) bei java.io.OutputStreamWriter.write (OutputStreamWriter.java:220) bei java.io.Writer.write (Writer.java:157) bei org.restlet.representation.StringRepresentation.write (StringRepresentation.java:237) bei org.restlet.representation.CharacterRepresentation.write (CharacterRepresentation.java:76) bei org.restlet.engine.adapter.ServerCall.writeResponseBody (ServerCall.java:509) bei org.restlet.engine.adapter .ServerCall.sendResponse (ServerCall.java:453) bei org.restlet.ext.jetty.internal.JettyCall.sendResponse (JettyCall.java:312) bei org.restlet.engine.adapter.ServerAdapter.commit (ServerAdapter . java: 196) bei org.restlet.engine.adapter.HttpServerHelper.handle (HttpServerHelper.java:153) bei org.restlet.ext.jetty.JettyServerHelper $ WrappedServer.handle (JettyServerHelper.java:170) bei org.eclipse.jetty.server.AbstractHttpConnection.handleRequest (AbstractHttpConnection.java:452) bei org.eclipse.jetty.server.AbstractHttpConnection.content (AbstractHttpConnection.java:894) bei org.eclipse.jetty.server .AbstractHttpConnection $ RequestHandler.content (AbstractHttpConnection.java:948) bei org.eclipse.jetty.http.HttpParser.parseNext (HttpParser.java:943) um org.eclipse.jetty.http.HttpParser.parseAvailable (HttpParser.java : 235) bei org.eclipse.jetty.server.AsyncHttpConnection.handle (AsyncHttpConnection.java:77) bei org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle (SelectChannelEndPoint.java:622) bei org .eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run (SelectChannelEndPoint.java:46) bei org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:603) bei org.eclipse. jetty.util.thread.QueuedThreadPool $ 3.run (QueuedThreadPool.java:538) bei java.lang.Thread.run (Thread.java:722)
Wenn das passiert, hängt der Client auf unbestimmte Zeit.
Hier ist ein Codebeispiel, das das Problem reproduziert:
Server-Seite:
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";
}
}
Client-Seite:
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());
}
Was hier vor sich geht und wie beseitige ich den Fehler ?