Asenkronize halka bağdaştırıcısı için jet kullanıyorum. Jet ayrıca, :body
değeri de bir kanal olan bir kanalı döndüren async http-client ile birlikte gelir.Git blokları ile clojure kodu yapılandırma
Ayrıca, eşzamansız sunucu yol işleyicisi, :body
anahtarı kanalı içerebilen bir haritayı döndürebilir. Bu kanal kapatıldığında, yanıt müşteriye iade edilir.
İzlediğim go
kod yazıyorum: Benim route-function
yılında
(defn- api-call-1 []
(go (-> (jet-client/get "api-url-1")
<!
:body ;; jet http client :body is also a channel.
<!
api-call-1-response-parse)))
(defn- api-call-2 []
(go (-> (jet-client/get "api-url-2")
<!
:body
<!
api-call-2-response-parse)))
(defn route-function []
(let [response-chan (chan)]
(go
(let [api-call-1-chan (api-call-1) ;; using channel returned by go
api-call-2-chan (api-call-2)]
(-> {:api-1 (<! api-call-1-chan)
:api-2 (<! api-call-2-chan)}
encode-response
(>! response-chan)))
(close! response-chan))
;; for not blocking server thread, return channel in body
{:body response-chan :status 200}))
i engelleyemezsiniz.
Bu kod düzgün çalışıyor olsa da, api-call-1 içinde go
kullanıyor musunuz?
api-call-1
numaralı telefondan <!
'u kullanıyorum. Bunu go
bloğuna koymam gerekiyor. Şimdi bu go
bloğunun kanalını route-function
numaralı telefondan kullanıyorum. Bu unidomatic görünüyor mu? api-call-1-response-parse
veya hatta :body
kanallarını route-function
numaralı kanala maruz bırakmama konusunda endişeliyim.
Yapı go
kodunun ve işlevlerinin yapılandırılmasının doğru yolu nedir? api-call-1/2
işlevlerindeki fazladan go
blokları önemsemem gerekir mi?