关于websocket:使用http-kit和Clojure处理”房间”

Handling “rooms” with http-kit and Clojure

我有一个使用http-kit服务器的漂亮的小型WebSocket应用,我对自己感觉很好。现在,我想向我的应用程序添加不同的"房间"(其列表应该是动态的),但是我很难找到任何文档或示例项目。我不害怕旋转自己的解决方案,但是借鉴他人的经验也很不错。有人知道类似实现的任何示例吗?

我可以想到两种方法:

1)我可以只将"房间"与通道保持在一起,然后仅send!保持与该房间关联的通道。似乎是最简单的方法,但是每当我广播消息时,我都会通过每个连接的频道进行过滤。

2)每次打开新房间时,我都可以构建一个新的套接字端点,然后将新URL发送回前端(或者如果房间已经打开,则发送现有URL),然后删除旧的URL套接字并打开一个新的新URL。构建新端点需要一些开销,但随后我可以向订阅它的每个频道广播。

还有其他想法或建议吗?我对使用WebSockets和Clojure进行编程还很陌生,所以我觉得可能会有更好的方法。


您的两个解决方案都很好,尽管#1可以通过在状态中保留附加地图来略微改善,因此您将拥有

  • 陈的地图->房间
  • 房间的另一个地图-> chans的向量。