4
我正在嘗試使用Aleph編寫一個簡單的TCP服務器。一切工作正常,除了我不確定我應該如何檢測通道何時關閉。與Aleph的Clojure TCP服務器
當客戶端關閉連接,該通道的兩側將被立即密封。來自頻道的最終消息將爲零
但是,我似乎沒有收到此最終的nil
消息。如果我檢查頻道,我確實看到它已關閉。這裏是我的代碼:
(use 'lamina.core 'aleph.tcp 'gloss.core)
(defn process-msg [ch msg]
(if (closed? ch)
(println "Channel has been closed") ;This never happens
(do-some-processing msg)))
(start-tcp-server
(fn [ch client-info]
(receive-all ch
(partial process-msg ch))
{:port 10000, :frame (string :utf-8 :delimiters ["\n"])})
我應該做一些不同的事情嗎?我的框架是否保持無消息處理?我可以有一個單獨的線程監視我的頻道並檢查它們是否已關閉,但這看起來像是一個糟糕的設計。我寧願使用Aleph,但現在它看起來像我將需要使用原始的Netty處理程序。直接使用Netty會很好,但如果可能的話,我寧願使用Aleph,因爲它感覺有點更習慣。
感謝。這正是我所期待的。我沒有想過檢查Lamina文檔。 – dbyrne