java ajax json restlet chunked-encoding

java - Tiempos de espera de Restlet, CLAP, Ajax y chunk



json chunked-encoding (1)

Estamos usando RESTlet para hacer un pequeño servidor REST para un proyecto que tenemos. Configuramos un montón de rutas en una clase heredada de la Application :

public static void createRestServer(ApplicationContext appCtx, String propertiesPath) throws Exception { // Create a component Component component = new Component(); component.getServers().add(Protocol.HTTP, 8081); component.getClients().add(Protocol.FILE); component.getClients().add(Protocol.CLAP); Context context = component.getContext().createChildContext(); RestServer application = new RestServer(context); application.getContext().getParameters().add("useForwardedForHeader", "true"); application.getContext().getAttributes().put("appCtx", appCtx); application.getContext().getAttributes().put("file", propertiesPath); // Attach the application to the component and start it component.getDefaultHost().attach(application); component.start(); } private RestServer(Context context) { super(context); } public synchronized Restlet createInboundRoot() { Router router = new Router(getContext()); // we then have a bunch of these router.attach("/accounts/{accountId}", AccountFetcher.class); //LIST Account level // blah blah blah // finally some stuff for static files: // Directory directory = new Directory(getContext(), LocalReference.createClapReference(LocalReference.CLAP_CLASS, "/")); directory.setIndexName("index.html"); router.attach("/", directory); return router; }

El problema: si solicito un archivo .js en el JAR a través de Ajax desde una página web (también cargado a través de CLAP desde este JAR), solo devolverá los primeros 7737 bytes de ese archivo y luego se bloqueará. No consigo que devuelva el resto del archivo. Siempre se cuelga después de exactamente el mismo número de bytes. 1 en 50 veces funciona.

¿Alguna idea de por qué está colgando? ¿Puedo simplemente desactivar la codificación fragmentada para CLAP y los archivos estáticos (todos los nuestros son bastante pequeños).

Esto nos está volviendo locos.


No sé qué conector de servidor utiliza para su aplicación, pero parece que es el predeterminado.

Restlet es conectable y extensible en diferentes niveles. Te recomiendo usar el Jetty one. Para hacerlo, simplemente agregue el archivo JAR para la extensión Jetty ( org.restlet.ext.jetty.jar ) dentro de su classpath. El conector se registrará automáticamente y se utilizará en lugar del predeterminado.

También te recomiendo actualizar a la última versión (2.3).

Para ver qué conectores están registrados en el motor Restlet, puede usar el siguiente código:

List<ConnectorHelper<Server>> serverConnectors = Engine.getInstance().getRegisteredServers(); for (ConnectorHelper<Server> connectorHelper : serverConnectors) { System.out.println("Server connector: "+connectorHelper); }

No deberías tener tales problemas después de hacer esto.

Espero te ayude, Thierry