Закрыл вкладку — ушёл, обновил страницу — остался: присутствие в комнате на WebSocket

Wait 5 sec.

Когда человек закрыл вкладку, обновил страницу или потерял сеть, сервер получает один и тот же SessionDisconnectEvent, а реагировать должен по-разному. Рассказываю, как в своём Planning Poker научил комнату различать эти случаи и не терять текущие данные при обновлении: маркер закрытия на pagehide, атомарные обновления MongoDB, порядок кадров в Spring, обходы для Firefox и zone.js и живые тесты в Chrome, Firefox и Safari. Восемь граблей и что с ними делать. Читать далее