1. сервер хранит список всех подключенных игроков, у каждого из них есть статус, изначально например - "готов"
2. игрок нажимает "играть", его статус на сервере меняется на "ищу оппонента"
3. сервер проверяет список игроков, если найдет хотя бы 2 со статусом "ищу оппонента" - меняет им статус на "играю", и запускает игру с этими двумя игроками
что такое очередь/поток/сеанс в твоем понимании, я не знаю, но суть такая.
уведомления игрокам, как и все остальные данные, ты передаешь через вебсокет.