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