clojure와 ClojureScript에서 모두 실행되는 게임 인 Crossfire을 작성하려합니다. 둘 다에서 작동하는 게시 - 가입 메커니즘이 필요합니다. 나는 lamina과 Shoreleave을 보았지만 둘 다 각각의 환경에 의존합니다.clojure와 clojurescript 모두에서 작동하는 하나의 publish-subscribe가 있습니까
가입자가 메시지를 기다릴 수있는 이벤트 시스템이 있어야합니다.
clojure와 ClojureScript에서 모두 실행되는 게임 인 Crossfire을 작성하려합니다. 둘 다에서 작동하는 게시 - 가입 메커니즘이 필요합니다. 나는 lamina과 Shoreleave을 보았지만 둘 다 각각의 환경에 의존합니다.clojure와 clojurescript 모두에서 작동하는 하나의 publish-subscribe가 있습니까
가입자가 메시지를 기다릴 수있는 이벤트 시스템이 있어야합니다.
업데이트 :
이 질문은 물어 core.async이 출시되기 전에 대답했다. core.async는이 문제를 정확하게 해결하도록 설계되었으므로 향후 모든 프로젝트에서 반드시 사용해야합니다.
원래 답 :
그것은 진정으로 비동기 아니지만, 나는 이것에 대한 원자와 전문가를 사용하여 아주 좋아 성장해 왔습니다. 아주 간단하지만 매우 유연한 모델이며 두 언어 모두에 내장되어 있습니다.
극히 간단한 예 :
(def my-channel (atom nil))
;; subscribe
(add-watch my-channel :watcher1
(fn [_ _ _ message]
(js/alert (str "Received message: " message))))
;; publish
(reset! my-channel "my-message")
;; unsubscribe
(remove-watch my-channel :watcher1)
이 방법의 장점은 원자의 상태가 개체 될 수 있다는 것이다. 여기서는 단순히 원자의 상태를 메시지로 재설정하는 것뿐입니다. 그러나 원자의 상태를 메시지의 전체 히스토리 또는 마지막 5 개 메시지 또는 전체 시스템을 나타내는 상태 시스템으로 만들 수 있습니다. 필요.
간단한 예를 들어 주셔서 감사합니다. 나는 그것이 도움이 될 것이라고 생각한다. –