我在一个独立的应用程序中运行了一个运行在Grizzly之上的Web服务。
Grizzly HTTP服务器实例化如下:
this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri);
WebappContext applicationContext = new WebappContext("test", "/test");
ServletRegistration registration = applicationContext.addServlet("jersey", ServletContainer.class);
registration.addMapping("/*");
registration.setInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, MyApplicationService.class.getName());
applicationContext.deploy(httpServer);
WebSocketAddOn webSocketAddon = new WebSocketAddOn();
httpServer.getListeners().forEach(listener -> {
listener.registerAddOn(webSocketAddon);
});
WebSocketEngine.getEngine().register("/ws", "/notifications", myNotificationService);
问题:我的通知服务不接受任何Web套接字连接。
但如果我改变:
// factory from org.glassfish.jersey.grizzly2.httpserver
this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri);
人:
// factory from org.glassfish.grizzly.http.server
this.httpServer = HttpServer.createSimpleServer(null, 8084);
然后我的服务接受Web套接字连接。
我不明白为什么。两者之间有什么区别?
答案 0 :(得分:1)
必须简单......
更换
this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri);
通过
this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri, false);
解决问题。
HTTP服务器在有机会配置Web Socket插件之前已自动启动。