Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-27 Thread Alexander Farber
On the browser side I had automatic reconnects implemented, whenever the
Websockets connection was closed.

But now I am trying to detect, that a player is already connected in
another browser tab and then send a custom close status 4000 from Jetty (so
that automatic reconnect is disabled there and a dialog is displayed to the
user, offering to reconnect):

// called by the onWebSocketText Jetty-callback
private void handleLogin(String username, String password) throws
Exception {
// check username + password and then send the player her/his open
games
mSession.getRemote().sendStringByFuture(mServlet.getGames(mUid));

// if oldSession is not null and still open,
// then the player has several browser tabs open or
// uses the mobile and the desktop app at the same time
Session oldSession = SESSIONS.put(mUid, mSession);
try {
oldSession.close(4000, "another game session detected");
oldSession.disconnect();
} catch (Exception ex) {
// ignore
}

However this only works sporadically, I rarely see the code 4000 in the
browser.

Is this caused by the half open connections too?

Thank you
Alex
___
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users


Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-27 Thread Alexander Farber
Hi Joakim, I have changed my custom 9.4.37.v20210219 WebSocketServlet to

@Override
public void configure(WebSocketServletFactory factory) {
factory.getPolicy().setIdleTimeout(5 * 60 * 1000);
factory.getPolicy().setMaxBinaryMessageSize(0);
factory.getPolicy().setMaxTextMessageSize(64 * 1024);
factory.register(MyListener.class);
factory.setCreator(new MyCreator(this)));
}

and have started implementing calling sendPing() every 4 minutes for the
connected clients, but then I have read your other message at
https://stackoverflow.com/a/54654700/165071

"Setting Max Idle Timeout and then causing the connection to not be idle by
sending ping/pong isn't ideal."

Do you mean by that, that if my custom WebSocketServlet will send PING
every 4 minutes to the browser clients, then the connection will never be
idle? Or what do you mean by "isn't ideal"? What else could be done here?

Thank you
Alex
___
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users


Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-27 Thread Alexander Farber
Thank you, Joakim!
___
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users


Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-26 Thread Joakim Erdfelt
I see you have a 1 hour idle timeout at the server side.

That's nice and all, but if you have clients connecting over mobile
networks you'll have to contend with intermediaries with their own TCP idle
timeouts. (quite common)

I've seen mobile networks close idle TCP connections due to idle timeout.
I've seen SIM cards with configurations to close idle TCP connections that
last too long.
I've seen specific mobile towers close idle TCP connections that last too
long.
I've seen overloaded mobile networks close idle TCP connections.

If the mobile network idle times out, and you don't send any traffic on
that connection from the server side, you won't know about it until the
server idle timeout triggers.

You'll want to make sure your program is aware of client reconnects and
whatnot, usually you see that as a result of a mobile device.
It can even happen with a mobile device moves from network to network.

I would recommend not relying on the 1 hour idle timeout to cleanup your
dead connections.

Instead, use the websocket protocol's ping/pong after a period of time to
ensure the other side is still there.
I would use ping/pong frequency faster than 5 minutes. (no more than 5
minutes between ping send).
Why 5 minutes?  Well, that's the most common mobile network TCP idle
timeout I've personally encountered (its even a common idle timeout seen on
the cloud providers own load balancers: google, aws, azure, etc.  which on
some providers you cannot increase, only decrease).

Joakim Erdfelt / joa...@webtide.com


On Fri, Feb 26, 2021 at 10:51 AM Alexander Farber <
alexander.far...@gmail.com> wrote:

> Thank you for your suggestion, Joakim, I didn't think about it.
>
> So I have added the remote port to the log (and also upgraded to Jetty
> 9.4.37.v20210219)
>
> and yes - the ports are different (please see the log below)... but how
> can a single user have so many connections (over a dozen) open to my game
> which requires a single connection only?
>
> What is the explanation? Some buggy browser (my players are from Russia)
> or too many tabs?
>
> qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=13533
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-34: onWebSocketClose: hostname=77.111.247.123 port=55271
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=33979
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=58969
> mUid=0 statusCode=1006 reason=Disconnected
> qtp100555887-54: onWebSocketClose: hostname=77.111.247.123 port=56049
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-34: onWebSocketClose: hostname=77.111.247.123 port=37309
> mUid=0 statusCode=1006 reason=Disconnected
> qtp100555887-54: onWebSocketClose: hostname=77.111.247.123 port=52163
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=59447
> mUid=0 statusCode=1006 reason=Disconnected
> qtp100555887-66: onWebSocketClose: hostname=77.111.247.123 port=40691
> mUid=0 statusCode=1006 reason=Disconnected
> qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=42557
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=57649
> mUid=18555 statusCode=1006 reason=Disconnected
> qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=15239
> mUid=18555 statusCode=1006 reason=Disconnected
>
> Thank you
> Alex
> ___
> jetty-users mailing list
> jetty-users@eclipse.org
> To unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/jetty-users
>
___
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users


Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-26 Thread Alexander Farber
Thank you for your suggestion, Joakim, I didn't think about it.

So I have added the remote port to the log (and also upgraded to Jetty
9.4.37.v20210219)

and yes - the ports are different (please see the log below)... but how can
a single user have so many connections (over a dozen) open to my game which
requires a single connection only?

What is the explanation? Some buggy browser (my players are from Russia) or
too many tabs?

qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=13533
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-34: onWebSocketClose: hostname=77.111.247.123 port=55271
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=33979
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=58969
mUid=0 statusCode=1006 reason=Disconnected
qtp100555887-54: onWebSocketClose: hostname=77.111.247.123 port=56049
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-34: onWebSocketClose: hostname=77.111.247.123 port=37309
mUid=0 statusCode=1006 reason=Disconnected
qtp100555887-54: onWebSocketClose: hostname=77.111.247.123 port=52163
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-17: onWebSocketClose: hostname=77.111.247.123 port=59447
mUid=0 statusCode=1006 reason=Disconnected
qtp100555887-66: onWebSocketClose: hostname=77.111.247.123 port=40691
mUid=0 statusCode=1006 reason=Disconnected
qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=42557
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=57649
mUid=18555 statusCode=1006 reason=Disconnected
qtp100555887-71: onWebSocketClose: hostname=77.111.247.123 port=15239
mUid=18555 statusCode=1006 reason=Disconnected

Thank you
Alex
___
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users


Re: [jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-26 Thread Joakim Erdfelt
It's likely multiple connections from the same user / remote address.

Include the mSession.getRemoteAddress().getPort() in your output to confirm.
If it reports different ports, then that's definitely multiple connections
being closed.

You can also create a unique "id" for every connection/session in your
onWebSocketConnect() and report that in your LOG info line.

Joakim Erdfelt / joa...@webtide.com


On Fri, Feb 26, 2021 at 7:45 AM Alexander Farber 
wrote:

> Hello,
>
> I am using Jetty 9.4.35.v20201120 for a Websockets word game with 2000
> users and while it works pretty stable, every minute or so I observe the
> following bursts in the log:
>
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1001 reason=
> INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 reason=Disconnected
> INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
> mUid=0 statusCode=1006 

[jetty-users] WebSocketListener.onWebSocketClose called numerous times

2021-02-26 Thread Alexander Farber
Hello,

I am using Jetty 9.4.35.v20201120 for a Websockets word game with 2000
users and while it works pretty stable, every minute or so I observe the
following bursts in the log:

INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1001 reason=
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-937: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-953: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-757: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-929: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-756: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-951: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-938: onWebSocketClose: hostname=77.111.244.123
mUid=0 statusCode=1006 reason=Disconnected
INFO:words:qtp100555887-951: onWebSocketClose: