Подтвердить что ты не робот

Restlet, CLAP, Ajax и тайм-ауты chunk

Мы используем RESTlet для создания небольшого небольшого сервера REST для проекта, который у нас есть. Мы создали цепочку маршрутов в классе, наследующем от 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;
}

Проблема: если я запрашиваю файл .js в JAR через Ajax с веб-страницы (также загружаемой через CLAP из этого JAR), он возвращает только первые 7737 байт этого файла, а затем зависает. Я не могу заставить его вернуть остальную часть файла. Он всегда зависает после точно такого же количества байтов. 1 в 50 раз он работает.

Любые идеи, почему он висит? Могу ли я просто отключить закодированную кодировку для CLAP и статических файлов (все наши довольно маленькие).

Это приводит нас в бешенство.

4b9b3361

Ответ 1

Я не знаю, какой серверный коннектор вы используете для своего приложения, но кажется, что он по умолчанию.

Restlet подключается и расширяется на разных уровнях. Я рекомендую вам использовать Jetty. Для этого просто добавьте JAR файл для расширения Jetty (org.restlet.ext.jetty.jar) в ваш путь к классам. Коннектор будет автоматически зарегистрирован и будет использоваться вместо стандартного.

Я также рекомендую вам перейти на последнюю версию (2.3).

Чтобы узнать, какие разъемы зарегистрированы в движке Restlet, вы можете использовать следующий код:

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

У вас не должно быть таких проблем после этого.

Надеюсь, это поможет вам, Thierry