clojure と aleph で Web ソケットを使用する非常に単純なブロードキャスト/エコー サーバーを作成しました。
私はアレフとラミナの情報源を調べるのに多くの時間を費やし、ここで何が起こっているのかをきちんとした基本的な理解を得ました.
私がしたいこと
- クライアントからの接続を確立する
- 不定期に指示をサーバーに送信する
- 命令が実行され、接続に関するメタデータに基づいて応答が他のユーザーに送信されます。
したがって、これはデータを処理し (これは素晴らしいことです)、応答をフォーマットすることができます (これは素晴らしいことです)。関係者のみに返信するようにするにはどうすればよいですか?
私がこれまでに持っているもの
(defn do-something
[arg]
(str "pickles" "are" "nice" arg))
(defn ws-handler [ch request]
(siphon (map* #(do-something %) ch) broadcast-channel)
(siphon broadcast-channel ch))
(defn -main
"Start the http server"
[& args]
(start-http-server ws-handler {:port 8080 :websocket true}))
リクエスト例
JSON で次のリクエストがあったとします。
{"room":32, "color":"red", "command":"do something..."}
これで「do something...」コマンドを実行すると、結果の出力が、最新のコマンドに {"room":32, "color":"red"} が含まれていた他のすべての人に送信されます。
このようにアレフで接続を管理する方法がわかりません...何か助けはありますか?