2016-01-06 74 views
0

我有非常簡單的代碼,但它並不完美。
在Java服務器,它只是說你好和再見打開和關閉連接時,並打印發送的消息:WebSocket - Javascript客戶端說連接,但Java服務器不

@ApplicationScoped 
@ServerEndpoint("/tictactoe") 
public class WebSocketServer { 
    private Logger logger = Logger.getLogger(this.getClass().getName()); 

    @OnOpen 
    public void open(Session session) { 
     logger.info("WebSocket: Hello - " + session.getId()); 
    } 

    @OnClose 
    public void close(Session session) { 
     logger.info("WebSocket: Farewell - " + session.getId()); 
    } 

    @OnMessage 
    public void messageHandler(String message, Session session) { 
     logger.info("WebSocket: New Message - " + message); 
    } 
} 

在JavaScript中它幾乎相同的像在服務器併發送消息點擊一個按鈕時, :

var socket = new WebSocket("ws://localhost:8080/TicTacToeZTP/tictactoe"); 
    socket.onopen = function (event) { 
     console.log("WebSocket: Connected"); 
     console.log("WebSocket: " + checkConnection(socket.readyState)); 
    }; 
    socket.onclose = function (event) { 
     console.log("WebSocket: Disconnected"); 
    }; 
    socket.onerror = function(event) { 
     console.log("WebSocket: Error"); 
    }; 
    socket.onmessage = function (event) { 
     console.log("WebSocket: New Message - " + event.data); 
    }; 

    function checkConnection(readyState) { 
     switch(readyState){ 
      case 0: return "CONNECTING"; 
      case 1: return "OPEN"; 
      case 2: return "CLOSING"; 
      case 3: return "CLOSED"; 
      default: return "UNDEFINED"; 
     } 
    } 

    $("#send").click(function() { 
     var msg = { 
      type: "message", 
      text: "zaladzi" 
     }; 
     socket.send(JSON.stringify(msg)); 
    }); 

現在是時候解決問題了。 刷新一頁與建立連接
什麼腳本說:

WebSocket: Connected 
WebSocket: OPEN 

但是服務器不打開一個新的。事實上,我有時需要幾次刷新才能在服務器上打開新的連接。
什麼服務器說:

Info: WebSocket: Hello - 29538711-f815-4c59-835e-97aaaac1d112 
Info: WebSocket: Farewell - 29538711-f815-4c59-835e-97aaaac1d112 

我使用似鯖水狼牙魚4.1服務器。如何解決這個問題?
TL/DR 的JavaScript客戶說連接打開,但的Java客戶端說有沒有這樣的連接

回答

1

這可能是由於Payara服務器中的一個錯誤,該錯誤修復了https://github.com/payara/Payara/issues/536,該錯誤在重新使用套接字時服務器中未調用OnOpen。

您可以嘗試Payara的預發佈版本以確保它已修復。預發佈版本可從the Payara website獲得,每次Jenkins CI服務器完成GitHub合併構建時,都會創建並上傳新的預發佈版本。

相關問題