Пишу я свой WEB-фреймворк на go и сейчас добавляю поддержку webSocket.
У каналов в GO есть недостаток. При переполнении канала горутина «роутера» остановится ожидая пока горутина «сессии» заберёт сообщение из него. Конечно этого можно избежать если по уму писать горутины сессий. Но это всё таки фреймворк. И уж лучше пусть он в журналах ругается на расход памяти, чем зависает по причине того что JS скрипт со страницы отправил слишком много сообщений.
И я подумал, использовать карты с ключём типа int64, добавляя в них по порядку пронумерованные сообщение и удаляя прочитанные. Но мне кажется это совсем не правильное использование карт. Есть ли какие то получше механизмы реализации безразмерных буферов? Так что бы можно было знать сколько элементов накопилось и аварийно сбросить если горутина не отвечает.