2017-09-09 7 views
2

J'ai un service Web fonctionnant au dessus de Grizzly dans une application autonome.grizzly + jersey + websocket - n'accepte pas les connexions

Le serveur HTTP Grizzly est instancié comme suit:

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); 

Problème: mon service de notification n'accepte une connexion socket web.

Mais si je change:

// factory from org.glassfish.jersey.grizzly2.httpserver 
    this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri); 

Par:

// factory from org.glassfish.grizzly.http.server 
    this.httpServer = HttpServer.createSimpleServer(null, 8084); 

Ensuite, mon service n'accepte les connexions socket web.

Je ne comprends pas pourquoi. Quelle est la différence entre les deux?

+0

Pour ma connaissance générale, quelle implémentation websocket utilisez-vous? Quand j'ai vu le grizzli, je pensais que vous utilisiez le serveur d'application semblable à GlassFish mais cela ne semble pas le cas. Pendant ce temps, j'essaie de comprendre la relation entre les services web et websocket dans votre exemple. Merci! – Al1

+0

J'utilise Grizzly comme serveur HTTP pour mes micro-services fonctionnant dans une application Java SE autonome. Grizzly fournit une implémentation Web Socket (pas une implémentation JSR 356). Les services Web sont utilisés pour la communication client à serveur (requêtes et commandes) tandis que les Web Sockets sont utilisés pour la notification des événements de domaine. –

+0

Un grand merci pour vos commentaires. Je peux revenir dans quelques mois, si cela ne vous dérange pas, car nous avons une application Java SE + développement websocket prévu pour l'année prochaine. – Al1

Répondre

1

Il devait être simple ...

Remplacement

this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri); 

par

this.httpServer = GrizzlyHttpServerFactory.createHttpServer(uri, false); 

résout le problème.

Le serveur HTTP a été démarré automatiquement avant de pouvoir être configuré avec le module Web Socket.