0

我有这个 Restlet 结构:

我实例化一个服务器对象:

server = new Server(new Context(), config.getServerProtocol(), config
                            .getServerPort());

在我实例化一个扩展应用程序的新 MyApp 类之后:

app = new org.myproject.restlet.server.MyApp(
    config, server.getContext());
app.start();

并启动服务器:

server.setNext(app);
server.start();

我没有任何组件,MyApp 分发到路由器并处理请求。如果此时有人有意见,将不胜感激。我正在使用 Restlet 2.0.14 JSE,并且我链接了码头 jar 以像我的 http 服务器一样使用它。我的服务器工作正常,我有一个 ajax 调用的 javascript 客户端,带有一个经典的轮询。但是我需要在服务器中实现长轮询(由于某些原因,我丢弃了流和推送模式)。我正在阅读如何实现这一点,第一种方式(丑陋的方式)可能是: - 在服务器中休眠线程并在服务器可能有东西时恢复。这种方式被丢弃,因为它不可扩展(这里有一篇关于它的帖子)。- 第二种方法可能是使用版本 7 的 Jetty continuations api。在此链接中我可以看到如何使用 jetty comet api 来暂停请求,但我不知道如何应用于我的 restlet 实现,如另一个链接中所述,我可以看到:

Continuation continuation = ContinuationSupport.getContinuation(request);
continuation.suspend();

但是 getContinuation 方法接收一个 ServletRequest 对象。但我的请求不是 ServletRequest。有人知道如何在 restlet 中转换或使用 ServletRequest 吗?可能我没有服务器编程的所有概念。

4

1 回答 1

0

我不能将 Jetty 延续与 Restlet 实例化的码头一起使用。为了实现长轮询,我忘记了 Restlet 并使用 java concurrency: wait()&实现notify(),一切运行正常。

于 2012-07-30T11:05:41.720 回答