我正在尝试使用 Aleph 编写一个简单的 TCP 服务器。一切正常,除了我不确定应该如何检测通道何时关闭。
从文档中:
当客户端关闭连接时,通道的两端将立即被密封。来自频道的最终消息将为 nil
但是,我似乎从未收到过这最后的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"])})
我应该做一些不同的事情吗?我的框架是否阻止了 nil 消息被处理?我可以有一个单独的线程来监视我的频道并检查它们是否已关闭,但这似乎是一个糟糕的设计。我更喜欢使用 Aleph,但现在看起来我需要使用原始的 Netty 处理程序。直接使用 Netty 会很好,但如果可能的话,我更喜欢使用 Aleph,因为它感觉更惯用。