The For my GWT RPC calls, I create a RequestBuilder with a timeout, so the
caller knows if the request never came back, and can deal with
the consequences. Ie:
public static RpcRequestBuilder createRpcRequestBuilder(int timeoutInMs) {
return new RpcRequestBuilder() {
@Override
protected RequestBuilder doCreate(String serviceEntryPoint) {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,
serviceEntryPoint);
builder.setTimeoutMillis(timeoutInMs);
return builder;
}
};
}
On Saturday, 15 November 2025 at 6:28:03 am UTC+11 Bob Lacatena wrote:
> I work on a web app which is a multi-user simulation used in training. As
> such, we have a wide variety of users, but the simulation is very
> interactive, with the "players" making decisions that are recorded on the
> backend, update the business model, and then reflect changes in everyone's
> user interface (browser).
>
> A lot of work has gone into keeping things in synch among 100+
> simultaneous users. In particular, many users have bad Internet connections
> (since the pandemic, many use horribly configured home networks) so extra
> effort is put into detecting message failures, retrying, or alerting users
> that their communication with the server is inadequate (so they don't think
> things are working when they aren't).
>
> In particular, we now have more and more Safari users, and Safari does not
> handle connections, connection pooling, and error reporting the way that
> Chrome or Firefox (or Edge) do.
>
> Safari will occasionally show the following error in the browser console:
>
> [Error] Failed to load resource: The network connection was lost.
> With respect to GWT requests, Safari often *doesn’t deliver a normal
> onreadystatechange with a status code*; instead it fires the XHR *onerror*
> (or onabort/ontimeout) path with status === 0. RequestBuilder doesn't
> detect this,, so our code is not detecting situations where a request fails
> in this way.
>
> [We detect this in Chrome because it will normally throw a
> StatusCodeException with a status code of zero.]
>
> [*According to ChatGPT...*] This happens often with Safari because
> Safari/WebKit
> is pretty aggressive about reusing TCP connections, and so can randomly
> throw this at any time it tries to reuse a connection that has gone stale
> (it apparently doesn't detect the problem and try a different connection
> itself).
>
> We have seen this behavior happen a lot, to the extent that we basically
> can't allow users to use Safari with our web simulations.
>
> I have some suggestions from ChatGPT (which I really don't trust much)
> that we can take action on to try to detect this edge case (no idea if it
> will really work), *but it would be far simpler if this was built into
> GWT and the RequestBuilder *(and possibly translated into a
> StatusCodeException or some other special construct that is
> browser-agnostic)*.*
>
> NOTE: There is no urgency to this "request". Our current off ramp is to
> just tell clients that users may not use Safari. But I'd love it if you
> solved the problem for us (someday).
>
--
You received this message because you are subscribed to the Google Groups "GWT
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/google-web-toolkit/7f73e434-d62e-4ff6-88c2-e5f4e6b53584n%40googlegroups.com.