Работа с комнатами с помощью http-kit и Clojure

У меня есть небольшое приложение WebSocket, использующее сервер http-kit, и я чувствую себя довольно хорошо. Теперь я хочу добавить в свое приложение разные «комнаты» (список которых должен быть динамическим), но мне трудно найти какую-либо документацию или примеры проектов. Я не боюсь раскручивать собственное решение, но приятно опираться на чужой опыт. Кто-нибудь знает примеры подобной реализации?

Я могу думать о двух подходах:

1) Я мог бы просто сохранить "комнату" в состоянии вместе с каналом, а затем просто send! для каналов, связанных с этой комнатой. Кажется, это самый простой подход, но тогда я фильтрую каждый подключенный канал каждый раз, когда передаю сообщение.

2) Я мог бы создавать новую конечную точку сокета каждый раз, когда открывается новая комната, и отправлять новый URL-адрес обратно во внешний интерфейс (или отправлять существующий URL-адрес, если комната уже открыта), что затем отбрасывает старый сокет и открывает новый на новый URL. Некоторые накладные расходы на создание новой конечной точки, но тогда я могу просто транслировать на каждый канал, на который подписан.

Любые другие идеи или вклад? Я все еще довольно новичок в программировании с помощью WebSockets и Clojure, поэтому я чувствую, что может быть лучший способ.


person TrivialCase    schedule 27.04.2018    source источник


Ответы (1)


Оба ваших решения совершенно хороши, хотя № 1 будет немного улучшен за счет сохранения дополнительной карты в состоянии, чтобы у вас было

  • карта от Чана --> комната
  • другая карта из комнаты --> вектор чанов.
person Arthur Ulfeldt    schedule 27.04.2018