JettyのWebSocketを使う

送られてきたメッセージを単純にブロードキャストするサンプル

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyWebSocketServlet extends WebSocketServlet {

    private static final long serialVersionUID = 1L;
    Logger log = LoggerFactory.getLogger(MyWebSocketServlet.class);

    // string には WebSocket のサブプロトコルが入る
    @Override
    public WebSocket doWebSocketConnect(HttpServletRequest hsr, String string) {
        // WebSocket インタフェースを実装したクラスのインスタンスを返す
        return new WebSocket.OnTextMessage() {

            protected Connection connection;

            // テキストのメッセージが届いたとき
            @Override
            public void onMessage(String data) {
                log.info("onMessage: " + data);
                // エコーする
                this.send(data);
            }

            // コネクションが開かれたとき
            @Override
            public void onOpen(Connection connection) {
                log.info("onOpen");
                this.setConnection(connection);
                this.send("Hello");
            }

            // コネクションが閉じられたとき
            @Override
            public void onClose(int closeCode, String message) {
                this.send("Bye");
                log.info("onClose");
            }

            public Connection getConnection() {
                return connection;
            }

            public void setConnection(Connection connection) {
                this.connection = connection;
            }

            protected void send(String message) {
                try {
                    this.getConnection().sendMessage(message);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        };
    }
}