簡體   English   中英

Websocket打開后關閉連接

[英]Websocket closing connection after it's opened

我有以下用於websockets的測試html頁面

 <!DOCTYPE html> <html> <head> <title>Apache Tomcat WebSocket Example</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> var ws = null; var target = 'ws://some_ip_addr:8080/gameserv-1.0/endpoint'; function connect() { if ('WebSocket' in window) { ws = new WebSocket(target); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(target); } else { alert('WebSocket is not supported by this browser.'); return; } ws.onopen = function() { log('Info: WebSocket connection opened.'); }; ws.onmessage = function(event) { log('Received: ' + event.data); }; ws.onclose = function() { log('Info: WebSocket connection closed.'); }; } function disconnect() { if (ws != null) { ws.close(); ws = null; } // setConnected(false); } function log(message) { $("#mydiv").append($("<p>").text(message)); } function testButtonSend() { var message = { 'commandType': 'TEST', 'command': 'AUCTIONLIST' }; ws.send(message); } $(document).ready(function() { connect(); }); </script> </head> <body> <div id="mydiv"> <input type="button" onclick="testButtonSend()"> </div> </body> </html> 

負責此websocket的java類是:

@ServerEndpoint("/endpoint")
public final class Websocket {

    Gson gson = new Gson();
    private boolean connectionOpen;
    private Session session;

    public Websocket(int byteBufferMaxSize, int charBufferMaxSize) {
        super();
        setConnectionOpen(false);
    }

    @OnOpen
    public void onOpen(final Session session, EndpointConfig config) {
        this.connectionOpen = true;
        this.session = session;
    }

    @OnClose
    public void close(Session session,
                      CloseReason reason) {
        this.connectionOpen = false;
        this.session = null;
    }

    @OnMessage
    public void onTextMessage(Session session, String message) throws IOException {
        MessageFromClientAPI messageFromClient = gson.fromJson(message, MessageFromClientAPI.class);

        Integer pID = messageFromClient.getpID();
        ....
    }

    public boolean send(MessageToClientAPI message) {
        if (!connectionOpen)
            return false;
        try {
            session.getBasicRemote().sendText(gson.toJson(message));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    public boolean isConnectionOpen() {
        return connectionOpen;
    }

    public void setConnectionOpen(boolean connectionOpen) {
        this.connectionOpen = connectionOpen;
    }
}

問題是連接打開后立即關閉。 此外,調試器不會在onOpen方法(以及任何其他方法)上停止。

怎么了

問題已解決。 原因是在構造函數中。 不對 我剛剛將其刪除,現在可以使用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM