WebSocket - Javascript客户端说连接,但Java服务器没有

时间:2016-01-06 02:14:17

标签: javascript java websocket java-websocket

我的代码非常简单,然而,它并没有完美地运作 在Java服务器中,它只是在打开和关闭连接时显示Hello和Bye并打印已发送的消息:

@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

我正在使用Payara 4.1服务器。如何解决这个问题?
TL / DR JavaScript 客户端表示连接已打开,但 Java 客户端表示没有这样的连接

1 个答案:

答案 0 :(得分:1)

这可能是由于Payara Server中的一个错误被修复https://github.com/payara/Payara/issues/536,因为当重新使用套接字时,服务器中没有调用OnOpen。​​

您可以尝试预付版本的Payara以确保它已修复。可以从the Payara website获得预发布版本。每次Jenkins CI服务器完成GitHub合并构建时,都会创建并上载新的预发布版本。