带有Aleph的Clojure TCP服务器
我正在尝试使用Aleph编写一个简单的TCP服务器。一切正常,但我不确定如何检测频道何时关闭 从: 当客户端关闭连接时,通道的两侧将立即密封。来自该频道的最后一条消息将为零 然而,我似乎从未收到这最后的带有Aleph的Clojure TCP服务器,tcp,clojure,netty,Tcp,Clojure,Netty,我正在尝试使用Aleph编写一个简单的TCP服务器。一切正常,但我不确定如何检测频道何时关闭 从: 当客户端关闭连接时,通道的两侧将立即密封。来自该频道的最后一条消息将为零 然而,我似乎从未收到这最后的nil消息。如果我检查通道,我确实看到它已关闭。这是我的密码: (use 'lamina.core 'aleph.tcp 'gloss.core) (defn process-msg [ch msg] (if (closed? ch) (println "Channel has be
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,因为它让人感觉更习惯
若要在通道关闭或排空时注册回调,请使用(在关闭的通道回调上)或(在排空的通道回调上),这两个选项都接受具有零参数的回调
谢谢。这正是我想要的。我没想到要检查薄板文件。