http-kit Clojure and Gloss - Недостаточно байтов для декодирования кадра
Я использую HTTP-KIT для записи простого сервера и клиента HTTP. А теперь я хочу отправить некоторые данные, закодированные с использованием глянца.
Мой код блеска выглядит примерно так:
(gcore/defcodec sized-string (gcore/finite-frame :uint16-be
(gcore/string :utf-8)))
(gcore/defcodec ordered-map-codec
(gcore/ordered-map :msg sized-string
:type sized-string))
Этот код хорошо работает:
(def data {:msg "Hello World", :type "alert"})
(def encoded
(gio/encode ordered-map-codec data))
(gio/decode ordered-map-codec encoded)
В HTTP-коде моего сервера / клиента у меня есть:
Для сервера:
(defonce server (atom nil))
(defn handler [request]
(println (gio/decode ordered-map-codec (get request :body ))))
(defn -main
[]
(reset! server (run-server handler {:port 8080})))
И для клиента:
(def options {:timeout 200
:body (gio/encode ordered-map-codec data)})
(http/post "http://localhost:8080" options
(fn [{:keys [status headers body error]}]
(if error
(println "Failed, exception is " error)
(println "Async HTTP GET: " status))))
Затем, когда я пытаюсь использовать клиент для отправки некоторых data
:
Sat Apr 18 11:24:24 BRT 2015 [worker-3] ERROR - GET /
java.lang.Exception: Insufficient bytes to decode frame.
at gloss.io$decode.invoke(io.clj:85)
at gloss.io$decode.invoke(io.clj:79)
at tapahtuma_server.server$handler.invoke(server.clj:35)
at org.httpkit.server.HttpHandler.run(RingHandler.java:91)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Async HTTP GET: 500
Спасибо за любую помощь здесь