Обработка "комнат" с помощью http-kit и Clojure - PullRequest
0 голосов
/ 27 апреля 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 28 апреля 2018

Оба ваших решения полностью в порядке, хотя # 1 можно было бы немного улучшить, если бы вы сохранили дополнительную карту в этом состоянии, чтобы вы получили

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