[英]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.