mirror of
https://github.com/ppy/osu.git
synced 2026-05-13 20:33:35 +08:00
Enable stateful reconnects (#35658)
RFC - Requires https://github.com/ppy/osu-server-spectator/pull/366 to actually function. Resolves https://github.com/ppy/osu/issues/35580 Resolves https://github.com/ppy/osu-server-spectator/issues/193 Resolves https://github.com/ppy/osu/issues/35586 Resolves https://github.com/ppy/osu-server-spectator/issues/362 Resolves https://github.com/ppy/osu/issues/37353 ## Outline This enables stateful reconnect for spectator-server endpoints, allowing ConnectionIds to be preserved for a short period and messages to be replayed on reconnect. In practice, this means short disconnects (<30s) should no longer: - Drop replays - Kick you out of multiplayer rooms - Trigger "user has come online" re-alerts. The following video demonstrates two of the above: https://github.com/user-attachments/assets/b9781f31-a8a1-410e-b0ac-65d3374a33d6 Stateful reconnect appears to kick in as long as the socket doesn't get disconnected, _not_ on subsequent re-connections. We have the timeout period set to SignalR's default of 30sec. I've been using the following to simulate a total link loss: ```sh #!/bin/bash DELAY=${1:-1} echo "Conditioning for $DELAY seconds..." sudo ip link set lo down sudo ss -K dst 127.0.0.2 > /dev/null sleep $DELAY sudo ip link set lo up ```
This commit is contained in:
committed by
GitHub
Unverified
parent
08c02e29b9
commit
aace7f9523
@@ -64,6 +64,8 @@ namespace osu.Game.Online
|
||||
options.Headers.Add(CLIENT_SESSION_ID_HEADER, API.SessionIdentifier.ToString());
|
||||
});
|
||||
|
||||
builder.WithStatefulReconnect();
|
||||
|
||||
builder.AddMessagePackProtocol(options =>
|
||||
{
|
||||
options.SerializerOptions = SignalRUnionWorkaroundResolver.OPTIONS;
|
||||
|
||||
Reference in New Issue
Block a user