main という名前の Clojurescript 名前空間があり、その中に state という名前のアトムがあるとします。
(ns main)
(atom state nil)
Clojurescript アプリをコンパイルしてサーバー上で実行し、Clojurescript repl を起動してから、ブラウザーを使用してサーバーに接続します。すべてがうまく機能します。
Clojurescript repl では、いつものことを確認できます
> (+ 1 1)
2
> (js/alert "Hey there") //shows an alert dialog with "Hey there" in the browser
nil
> main.state
(atom nil)
Clojurescript repl は開発に最適です。したがって、Clojure アプリケーションから Clojurescript アトムの値を (swap! または reset! を使用して) 取得および設定できることは明らかです。Clojurescript プロジェクトのアトムの値と実行中の Clojure アプリケーションを関連付ける方法はないかと考えていました。おそらく、Clojurescript クライアントは指定されたポートに接続し、そのポートで待機している Clojure サーバーに結果を送信します。state
簡単に言えば、実行中のサーバー アプリケーションでクライアント アトムの値を共有できるかどうか疑問に思っていました。
なぜ、あなたは尋ねるかもしれませんか?実行中の Clojurescript アプリケーションで が変更さstate
れるたびに、アトムの値を実際のファイル (state.clj)に書き込むとよいと考えていました。state
このようにして、常に の現在の値を確認できますstate
。(global-auto-revert-mode t)
state.clj バッファーが常にかなり最近のものであることを確認するために、emacs のようなものを使用できます。これは、デバッガを使用することに少し似ています。
それ以上に、私の本当の望みは、実行中の Clojure アプリケーションが定期的に state.clj 自体もポーリングするようにすることです。サーバーは、私が state.clj を変更したことを検出すると、その変更を Clojurescriptstate
アトムの新しい値として受け入れます。次に、Clojurescript repl が行うことと同様のことを行います。これを次の擬似コードに示します。
(send-to-client-for-evaluation
(compile-into-js
(reset!
main.state
the-read-string-value-of-the-content-of-state.clj)))
基本的に、サーバーがクライアントとサーバーの間で共有アトムに似たものを持つことができるようにしたいと考えています。state
の値をクライアントとサーバーの間で双方向に共有したいと考えています。これは可能ですか、それとも私はただ夢を見ているだけですか?