Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Websocket客户端作为Servlet(应用程序引擎)_Java_Sockets_Google App Engine_Websocket - Fatal编程技术网

Java Websocket客户端作为Servlet(应用程序引擎)

Java Websocket客户端作为Servlet(应用程序引擎),java,sockets,google-app-engine,websocket,Java,Sockets,Google App Engine,Websocket,我正在尝试在servlet中建立WebSocket连接。我收到一些来自服务器的回调消息,但很少。我调用了Thread.sleep(30000),因此servlet应该等待30秒以获得新消息,但出于某种原因它似乎没有等待 以下是我的Servlet中的代码: try { // open websocket final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("wss://

我正在尝试在servlet中建立WebSocket连接。我收到一些来自服务器的回调消息,但很少。我调用了Thread.sleep(30000),因此servlet应该等待30秒以获得新消息,但出于某种原因它似乎没有等待

以下是我的Servlet中的代码:

try {
    // open websocket
    final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("wss://www.bitmex.com/realtime"));

    // add listener
    clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler() {
        public void handleMessage(String message) {


            System.out.println(message);

            logger.info("WEBSOCKET MSG: "+message);

        }
    });

    // send message to websocket
    clientEndPoint.sendMessage("{\"op\": \"subscribe\", \"args\": \"trade\"}");

    // wait 30 seconds for messages from websocket
    Thread.sleep(30000);

} catch (InterruptedException ex) {
    System.err.println("InterruptedException exception: " + ex.getMessage());
} catch (URISyntaxException ex) {
    System.err.println("URISyntaxException exception: " + ex.getMessage());
}
这是我的WebsocketClientEndpoint代码:

import java.net.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;

@ClientEndpoint
public class WebsocketClientEndpoint {

    Session userSession = null;
    private MessageHandler messageHandler;

    public WebsocketClientEndpoint(URI endpointURI) {
        try {
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            container.connectToServer(this, endpointURI);


        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Callback hook for Connection open events.
     *
     * @param userSession the userSession which is opened.
     */
    @OnOpen
    public void onOpen(Session userSession) {
        System.out.println("opening websocket");
        this.userSession = userSession;
    }

    /**
     * Callback hook for Connection close events.
     *
     * @param userSession the userSession which is getting closed.
     * @param reason the reason for connection close
     */
    @OnClose
    public void onClose(Session userSession, CloseReason reason) {
        System.out.println("closing websocket");
        this.userSession = null;
    }

    /**
     * Callback hook for Message Events. This method will be invoked when a client send a message.
     *
     * @param message The text message
     */
    @OnMessage
    public void onMessage(String message) {
        if (this.messageHandler != null) {
            this.messageHandler.handleMessage(message);
        }
    }

    public void addMessageHandler(MessageHandler msgHandler) {
        this.messageHandler = msgHandler;
    }

    public void sendMessage(String message) {
        this.userSession.getAsyncRemote().sendText(message);
    }

    public static interface MessageHandler {

        public void handleMessage(String message);
    }
}
正确的方法是什么?或者这可能是应用程序引擎(标准环境)的问题吗