notes descargar java websocket jetty embedded-jetty

java - descargar - ¿Cómo creo un servidor WebSocket incrustado Jetty 9?



jetty doc (2)

Odio hacer una pregunta tan vaga, pero me está costando encontrar un ejemplo simple. Esto es lo que tengo hasta ahora:

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

Los ejemplos de Jetty incrustados que puedo encontrar siempre muestran algo como lo siguiente, para iniciar una instancia de Servidor en ejecución, pero no sé cómo crear una instancia de mi WebSocketServlet.

Server server = new Server(8080); server.start(); server.join();

¿Cómo creo un servidor incorporado que pueda manejar las solicitudes de conexión de WebSocket?


Aquí está el enfoque de servlet:

1) En este caso, no necesita usar este código (es responsabilidad del contenedor):

Server server = new Server(8080); server.start(); server.join();

2) Crear el descriptor web.xml para el 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>

Ahora, cuando escribes JS:

var ws = new WebSocket("ws://localhost:8080/hello"); ws.send("text");

el mensaje se maneja con el método onText de su MyEchoSocket

Aquí está el tutorial para más servlets de comprensión, tutorial

Buena suerte.


Actualización: 2 de diciembre de 2013

Para ver un ejemplo actualizado de Embedded Jetty con WebSocket, consulte:

https://github.com/jetty-project/embedded-jetty-websocket-examples

Respuesta original

Hay un ejemplo encontrado en los casos de prueba.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/examples/echo/ExampleEchoServer.java

Respuesta corta:

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

Esto creará un servidor simple que maneja 1 contexto, el contexto raíz.

http://localhost:8080/

Si desea vincular el WebSocketHandler a otro contexto, envuélvalo en 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();

Esto unirá tu websocket a

http://localhost:8080/echo/