fix desync & try to fix delay
This commit is contained in:
parent
b077097a33
commit
dc893baf94
5 changed files with 78 additions and 3 deletions
|
|
@ -8,6 +8,16 @@ public class Session
|
|||
public WebSocket Socket { get; }
|
||||
public Channel<(byte[] Buffer, int Length)> SendQueue { get; }
|
||||
|
||||
// Ostatni znak życia (dowolna odebrana ramka - audio, wideo, ping typu 5).
|
||||
// Klient pinguje co 2 s, więc sesja bez ruchu przez VOICE_IDLE_TIMEOUT to
|
||||
// martwy polłączony TCP (zabita aplikacja, utracony NAT mapping) - taki wpis
|
||||
// zamiata task w Program.cs. Bez tego ghost-sesje wiszą w rosterze wiecznie
|
||||
// (/room/users zwraca nieżyjących uczestników -> ghost kafelki u innych,
|
||||
// a relay marnuje bandwidth na zamknięte sockety).
|
||||
private long _lastSeenUtcTicks;
|
||||
|
||||
public DateTime LastSeenUtc => new(Interlocked.Read(ref _lastSeenUtcTicks), DateTimeKind.Utc);
|
||||
|
||||
public Session(WebSocket socket)
|
||||
{
|
||||
Socket = socket;
|
||||
|
|
@ -15,5 +25,8 @@ public class Session
|
|||
{
|
||||
FullMode = BoundedChannelFullMode.Wait
|
||||
});
|
||||
_lastSeenUtcTicks = DateTime.UtcNow.Ticks;
|
||||
}
|
||||
}
|
||||
|
||||
public void Touch() => Interlocked.Exchange(ref _lastSeenUtcTicks, DateTime.UtcNow.Ticks);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue