我正在使用Clojure应用程序,客户端需要向服务器发送一些命令。这些将在相当大的数量内发生,所以我希望它在处理和线上序列化尺寸方面都相当有效。
在Clojure中这样做的最佳方式是什么?
目前我在考虑:
然而,这似乎有点令人费解,我相信其他人已经提出了更聪明的方法。任何想法/建议都非常感谢!
答案 0 :(得分:4)
如果参数不是太大而且信源是可信的,为什么不发回s-expressions和fort,
(eval (read-string "(println \"Hello World\")"))
作为LISP方言代码的Clojure是数据。
编辑:
为安全起见,在读取字符串后,根据一组有效的命令检查命令,
(contains? #{'println}
(first (read-string "(println \"Hello World\")")))
或者您可以使用为此设计的库,例如
答案 1 :(得分:2)
Google的协议缓冲区怎么样? Clojure中有一个用于处理它们的库:clojure-protobuf。我记得Freenode上有人#clojure在一项严肃的任务(处理大量的Twitter数据)上做了一个Haskell与OCaml vs. Clojure的比较;他/她一直对lib赞不绝口。
更新: Here是我想到的#clojure对话的相关话语。
答案 2 :(得分:1)
我的答案不是Clojure特有的,但我更喜欢字符串而不是http - 它是合理的标准和合理有效的。
在几乎所有语言中都有JSON库,我会使用它(以及简单的标准命令格式),除非数据量很大。
我的经验是,你需要摆弄专门的格式,插座和协议越少,你就越有可能在海滩度过周末:)。
在基准测试显示需要其他内容之前,我会保留比JSON更复杂的内容。