Websocket 把球衣和轮胎结合起来

Websocket 把球衣和轮胎结合起来,websocket,jersey,jax-rs,grizzly,tyrus,Websocket,Jersey,Jax Rs,Grizzly,Tyrus,我有一个在Grizzly实例上运行的Jersey JAX-RS应用程序: public class Application { public static final String BASE_URI = "http://127.0.0.1:8080/rest"; public static void main(String[] args) throws IOException { ResourceConfig rc = new ResourceConfig().

我有一个在Grizzly实例上运行的Jersey JAX-RS应用程序:

public class Application {
    public static final String BASE_URI = "http://127.0.0.1:8080/rest";

    public static void main(String[] args) throws IOException {
        ResourceConfig rc = new ResourceConfig().packages("my.package.rest");
        HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
        System.out.println("Server started, press any key to stop.");
        System.in.read();
        server.shutdownNow();
    }
}
my.package.rest
中有JAX-RS注释的资源。我想在同一个服务器实例(比如“”)上使用Tyrus添加带注释的websocket(
@ServerEndpoint
@OnOpen
@OnMessage
)资源,但我能找到的所有文档都显示了如何使用Tyrus+Grizzly容器启动独立的websocket服务器,而不是与Jersey结合使用。我要找的东西是:

server.getServerConfiguration().addHttpHandler(new SomeTyrusHttpHandler("/websocket"));

但是我找不到任何类似于
sometryrushttphandler
的东西。如何将Jersey和Tyrus合并到一台Grizzly服务器中?

这是一个很好的问题,但目前还没有很好的答案。你仍然可以做到这一点,但这需要深入研究灰熊的内部结构;Tyrus由一个插件注册(请参阅),它可以通过注册到该容器中的方式与Jersey组合

请记住,将这两个框架集成在一起并不是一个微不足道的挑战-在单个容器中运行它们是第一步,但还需要注意其他事项,如“实例提供程序”、生命周期调整、,我相信这个话题超出了一个答案的范围——你可以从我或其他Tyrus/Jersey团队成员那里得到关于这个问题的博客帖子。(完成后我会在这里发布)


无论如何,我建议采取更保守的方法,使用一些支持Servlet3.1的轻量级容器;这将大大减少您的工作量,您将拥有标准的Servlet运行时/生命周期。

只需使用Atmosphere,它就能完全满足您的需要,并允许在Grizzly、GlassFish等平台上运行Jersey。例如,Jersey 2在websockets上透明运行的超级简单示例。请参见--PoC,它结合了Jersey和Tyrus(在Grizzly+HK2上)。您好,有关于这种集成的消息吗?我想将WebSocket资源添加到我的Jersey项目中。