Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create an embedded WebSocket server Jetty 9?

I hate asking such a vague question, but I'm having a hard time finding a simple example. Here's what I have so far:

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

The embedded Jetty examples I can find always show something like the following, to start a Server instance running, but I don't know how to instantiate my WebSocketServlet.

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

How do I create an embedded server that can handle WebSocket connection requests?

like image 891
Alex Pritchard Avatar asked Mar 26 '13 19:03

Alex Pritchard


People also ask

How do I create a new WebSocket connection?

Creating Web Socket connections is really simple. All you have to do is call the WebSocket constructor and pass in the URL of your server. // Create a new WebSocket. var socket = new WebSocket('ws://echo.websocket.org');


1 Answers

Update: Dec 2, 2013

For an up to date example of the Embedded Jetty with WebSocket see:

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

Original Answer

There's an example found in the test cases.

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

Short Answer:

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

This will create a simple server that handles 1 context, the root context.

http://localhost:8080/ 

If you want to bind the WebSocketHandler to another context, wrap it in a 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(); 

This will bind your websocket to

http://localhost:8080/echo/ 
like image 125
Joakim Erdfelt Avatar answered Sep 26 '22 14:09

Joakim Erdfelt