Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Is static ConcurrentHashMap a reliable choice for WebSocketServlet?

Alexander,

I think the ConcurrentHashMap data structure is fine. However it doesn't necessarily need to be static. You could store it as a field in your WebSocketServlet and pass it in when you create your WebSocketListener.

In your code I would only expect oldSession to be non-null when you have multiple connections for the same mUid. The standard case where you have no previous entry in the map for mUid, then the value returned by `SESSIONS.put(mUid, mSession)` will be null.

Cheers,
Lachlan

On Sun, Feb 28, 2021 at 9:05 AM Alexander Farber <alexander.farber@xxxxxxxxx> wrote:
Good evening,

In a custom WebSocketServlet in Jetty 9.4.37.v20210219 I would like to maintain Session objects in a shared data structure.

Is a static data structure like

    public final static Map<Integer, Session> SESSIONS = new ConcurrentHashMap<>();

a good choice for that?

I have a feeling it does not work reliably. Maybe Jetty starts several Linux process and thus the static data structure is not shared among them?

Because in my custom WebSocketListener I have a code:

    @Override
    public void onWebSocketText(String str) {
        // here the user is authenticated and mUid is found
        Session oldSession = SESSIONS.put(mUid, mSession);
        disconnect(oldSession);
    }

    private void disconnect(Session session) {
        LOG.info("disconnect: session={}", session); // surprisingly often session is null
        try {
            session.close();
            session.disconnect();
        } catch (Exception ex) {
            // ignore
        }
    }

And often the old session printed by the above LOG is null, even though I would expect it be non-null.

Best regards
Alex

_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users

Back to the top