0

I have very simple code, yet, it doesn't work perfectly.
In Java server it just says Hello and Bye when opening and closing a connection and prints a sent message:

@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);
    }
}

In JavaScript it does pretty much the same like in the server and sends a message when clicking a button:

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));
    });

Now its time for a problem. After refreshing a page with an established connection.
What the script says:

WebSocket: Connected
WebSocket: OPEN

But the server doesn't open a new one. In fact I sometimes need a couple of refreshes to open a new connection on the server.
What the server says:

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

I'm using Payara 4.1 server. How to solve this issue?
TL/DR JavaScript client says connection is opened, but Java client says there is no such a connection.

1 Answer 1

1

This is likely due to a bug in Payara Server which is fixed https://github.com/payara/Payara/issues/536 in that bug OnOpen isn't called in the server when a socket is reused.

You could try a pre-release version of Payara to ensure it is fixed. Pre-release builds are available from the Payara website a new pre-release build is created and uploaded every time their Jenkins CI server completes a GitHub merge build.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.