从Clojure进行反序列化的代码序列化

从Clojure进行反序列化的代码序列化,clojure,protocol-buffers,zeromq,Clojure,Protocol Buffers,Zeromq,我在这里是以这个例子为例的 我已经验证了我可以序列化MarketData,并为其构建了protobuf 我决定尝试我新学到的protobuf序列化知识,而不是使用chesire序列化。当我将该示例中的函数修改为它们的gpb版本时 (future-call market-data-publisher-gpb) 看起来还可以。但是,当我运行客户端时 (get-market-data-gpb 100) 什么也没发生。我有两个问题: 1) Clojure是否有某种图形或其他调试器? 2) 如果有人能

我在这里是以这个例子为例的

我已经验证了我可以序列化MarketData,并为其构建了protobuf

我决定尝试我新学到的protobuf序列化知识,而不是使用chesire序列化。当我将该示例中的函数修改为它们的gpb版本时

(future-call market-data-publisher-gpb)
看起来还可以。但是,当我运行客户端时

(get-market-data-gpb 100)
什么也没发生。我有两个问题:

1) Clojure是否有某种图形或其他调试器? 2) 如果有人能给我指出正确的方向,指出我在修改的例子中做错了什么,那也会很有帮助

我似乎还记得在ZMQ上使用[protobuf]二进制数据负载需要一组不同的调用

(ns clj-zmq.core
  (:import [org.jeromq ZMQ])
)

(use 'flatland.protobuf.core)

(import com.example.Example$MarketData)
(def MarketData (protodef Example$MarketData))


(def ctx (ZMQ/context 1))

(defn market-data-publisher-gpb
[]
  (let [s (.socket ctx ZMQ/PUB)
        market-data-event (fn []
                            {:symbol (rand-nth ["CAT" "UTX"])
                             :size (rand-int 1000)
                             :price (format "%.2f" (rand 50.0))})]
    (.bind s "tcp://127.0.0.1:6666")
    (while :true
      (.send s ( protobuf-dump(market-data-event))))))

; Client
(defn get-market-data-gpb
  [num-events]
  (let [s (.socket ctx ZMQ/SUB)]
    (.subscribe s "")
    (.connect s "tcp://127.0.0.1:6666")
    (dotimes [_ num-events]
      (println (protobuf-load MarketData (.recv s))))
    (.close s)))

Eclipse逆时针和IntelliJ Cursive都支持Clojure调试


此外,您的地址看起来很糟糕-应该是“tcp://127.0.0.1:6666“

谢谢,我会调查的。我确实有那个bug,我修正了它(并修改了上面的帖子以反映它),程序仍然只是坐在那里,什么也不做。仍然不知道为什么这个代码不起作用。我如何获得protobuf dump创建的消息的字节大小,然后将其前置到字节大小?我开始相信jeromq不够强大,无法处理二进制消息。