首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ClojureScript中有任何对RPC的支持吗?

在ClojureScript中有任何对RPC的支持吗?
EN

Stack Overflow用户
提问于 2014-07-10 13:23:09
回答 2查看 1.3K关注 0票数 4

我有一个ClojureScript应用程序,我想对服务器进行RPC调用,这看起来像客户机端的正常函数core.async调用。

为了暂时做到这一点,我基于cljx编写了下面的代码。在RPC定义部分中,我必须添加所有服务器端函数,我想将这些函数作为RPC公开给客户端。

注意:发送函数是从这里获取的:https://dimagog.github.io/blog/clojure/clojurescript/2013/07/12/making-http-requests-from-clojurescript-with-core.async/

有没有办法在没有样板代码的情况下做得更好?

考虑到如何改进它,我唯一的想法就是编写一个leiningen插件,它生成RPC所需的服务器端和客户端代码,也就是我目前使用cljx所做的部分。有更好的办法吗?

代码语言:javascript
复制
(ns myapp.shared.rpc
  (:require
     #+cljs [myapp.tools :refer [send log]]
     #+cljs [cljs.reader :as reader]
     #+clj  [clojure.tools.logging :as log]
     #+clj  [noir.response :refer [edn]]
     #+clj  [myapp.rpc :as rpc]
   ))

#+cljs (defn rpc-client [function params]
#+cljs   (log "RPC call: (" function params ")")
#+cljs   (send "POST" "/api"
#+cljs         (str "rpc=" (pr-str {:fun function :params params}))
#+cljs         (fn [x]
#+cljs           (log "RPC response:'" x "'")
#+cljs           (:response (reader/read-string x)))))


#+clj (defmulti rpc-impl #(:fun %))

#+clj (defn rpc-server [{rpc :rpc}]
#+clj    (log/info "RPC call received:" rpc)
#+clj    (let [response (-> rpc read-string rpc-impl)]
#+clj      (log/info "RPC response sent: '" response "'")
#+clj      (edn {:response response})))




;;;;; RPC definitions


#+cljs (defn demo [ & p]  (rpc-client :demo p))
#+clj  (defmethod rpc-impl :demo [{p :params}] (apply rpc/demo p))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-17 10:21:06

下面是我见过的三个处理RPC的库。我对他们中的任何一个都没有很大的经验,所以,我的评论要大做文章。

  • 卡斯特拉。最新更新,并有一个很好的自述。
  • 获取。看上去简单,甜美,可能就足够了。
  • 休莱韦。一段时间前我成功地使用了这个。它运行良好,但有几年没有更新。
票数 1
EN

Stack Overflow用户

发布于 2016-10-05 16:22:29

有edn数据交换格式,可以使用CQRS作为数据交换方法。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24677717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档