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.
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/