Comment créer un serveur websocket embarqué Jetty 9?
Je déteste poser une question aussi vague, mais j'ai du mal à trouver un exemple simple. Voici ce que j'ai jusqu'à présent:
public class JettyWebSocketServlet extends WebSocketServlet{
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(MyEchoSocket.class);
}
}
@WebSocket
public class MyEchoSocket {
@OnWebSocketMessage
public void onText(WebSocketConnection conn, String message) {
System.out.println("text: " + message);
try {
conn.write(null, new FutureCallback(), "got: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Les exemples de Jetée intégrés que je peux trouver montrent toujours quelque chose comme ce qui suit, pour démarrer une instance de serveur en cours d'exécution, mais je ne sais pas comment instancier mon WebSocketServlet.
Server server = new Server(8080);
server.start();
server.join();
Comment créer un serveur intégré capable de gérer les demandes de connexion WebSocket?
2 réponses
Mise À Jour: Déc 2, 2013
Pour un exemple à jour de la jetée intégrée avec WebSocket, voir:
Https://github.com/jetty-project/embedded-jetty-websocket-examples
Réponse Originale À Cette Question
Il y a un exemple trouvé dans le test cas.
Réponse Courte:
Server server = new Server(8080);
WebSocketHandler wsHandler = new WebSocketHandler()
{
@Override
public void configure(WebSocketServletFactory factory)
{
factory.register(MyEchoSocket.class);
}
};
server.addHandler(wsHandler);
server.start();
server.join();
Cela va créer un serveur simple qui gère 1 contexte, le contexte racine.
http://localhost:8080/
Si vous voulez lier le WebSocketHandler à un autre contexte, enveloppez-le dans un ContextHandler.
Server server = new Server(8080);
WebSocketHandler wsHandler = new WebSocketHandler()
{
@Override
public void configure(WebSocketServletFactory factory)
{
factory.register(MyEchoSocket.class);
}
};
ContextHandler context = new ContextHandler();
context.setContextPath("/echo");
context.setHandler(wsHandler);
server.addHandler(context);
server.start();
server.join();
Cela va lier votre websocket à
http://localhost:8080/echo/
Voici l'approche servlet:
1) dans ce cas, n'avez pas besoin d'utiliser ce code (c'est la responsabilité du conteneur):
Server server = new Server(8080);
server.start();
server.join();
2) Créer web.descripteur xml pour servlet:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>WebSocket application</display-name>
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>com.example.websocket.JettyWebSocketServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
Maintenant, quand vous écrivez JS:
var ws = new WebSocket("ws://localhost:8080/hello");
ws.send("text");
Le Message est géré avec la méthode onText de votre MyEchoSocket
Voici un tutoriel pour mieux comprendre les servlets, tutoriel
Bonne chance.