解决方案 »

  1.   

    package examples;import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.Future;
    import java.util.concurrent.TimeUnit;import org.eclipse.jetty.websocket.api.Session;
    import org.eclipse.jetty.websocket.api.StatusCode;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
    import org.eclipse.jetty.websocket.api.annotations.WebSocket;/**
     * Basic Echo Client Socket
     */
    @WebSocket(maxTextMessageSize = 64 * 1024)
    public class SimpleEchoSocket {    private final CountDownLatch closeLatch;    @SuppressWarnings("unused")
        private Session session;    public SimpleEchoSocket() {
            this.closeLatch = new CountDownLatch(1);
        }    public boolean awaitClose(int duration, TimeUnit unit) throws InterruptedException {
            return this.closeLatch.await(duration, unit);
        }    @OnWebSocketClose
        public void onClose(int statusCode, String reason) {
            System.out.printf("Connection closed: %d - %s%n", statusCode, reason);
            this.session = null;
            this.closeLatch.countDown();
        }    @OnWebSocketConnect
        public void onConnect(Session session) {
            System.out.printf("Got connect: %s%n", session);
            this.session = session;
            try {
                Future<Void> fut;
                fut = session.getRemote().sendStringByFuture("Hello");
                fut.get(2, TimeUnit.SECONDS);
                fut = session.getRemote().sendStringByFuture("Thanks for the conversation.");
                fut.get(2, TimeUnit.SECONDS);
                session.close(StatusCode.NORMAL, "I'm done");
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }    @OnWebSocketError
        public void onError(Throwable cause) {
            cause.getStackTrace();
        }    @OnWebSocketMessage
        public void onMessage(String msg) {
            // session.getUpgradeResponse().get
            System.out.printf("Got msg: %s%n", msg);
        }    //@OnWebSocketMessage
        //public void onMessage(byte buf[], int offset, int length) {
        //    System.out.printf("Got msg: %s%n", "12");
        //}
    }
      

  2.   

    package examples;import javax.servlet.annotation.WebServlet;import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
    import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;@WebServlet(name = "MyEcho WebSocket Servlet", urlPatterns = { "/hello" })
    public class SimpleEchoServlet extends WebSocketServlet {    /**
         * @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
         */
        private static final long serialVersionUID = 5837369488442566390L;    @Override
        public void configure(WebSocketServletFactory factory) {
            factory.getPolicy().setIdleTimeout(10000);
            //ClientUpgradeRequest request = new ClientUpgradeRequest();
            //ClientUpgradeResponse response = new ClientUpgradeResponse();
            //factory.acceptWebSocket(request, response);
            factory.register(SimpleEchoSocket.class);
            
            
            // factory.acceptWebSocket(arg0, arg1);
        }
    }