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 Jetty incorporés que je peux trouver montrent toujours quelque chose comme le suivant, 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?
Mise à jour: 2 décembre 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
Il y a un exemple trouvé dans les cas de test.
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 souhaitez lier le WebSocketHandler à un autre contexte, encapsulez-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 liera votre websocket à
http://localhost:8080/echo/
Voici l'approche servlet:
1) Dans ce cas, pas besoin d'utiliser ce code (c'est la responsabilité du conteneur):
Server server = new Server(8080);
server.start();
server.join();
2) Créez un descripteur web.xml pour la 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, lorsque 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.