首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Aleph的Clojure TCP服务器

带有Aleph的Clojure TCP服务器
EN

Stack Overflow用户
提问于 2012-05-02 12:50:22
回答 1查看 2.1K关注 0票数 4

我正在尝试使用Aleph编写一个简单的TCP服务器。一切正常工作,除了我不确定我应该如何检测什么时候一个通道已经关闭。

来自文档

当客户端关闭连接时,通道的两侧将立即被密封。来自频道的最后消息将为零。

然而,我似乎从未收到过这条最后的nil消息。如果我检查这条通道,我确实看到它已经关闭了。这是我的代码:

代码语言:javascript
复制
(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,因为它让人觉得有点习以为常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 19:23:10

若要为通道关闭或耗尽时注册回调,请使用(打开关闭的ch回调)或(开机的ch回调),这两个回调都采用带零参数的回调。

https://github.com/ztellman/lamina/wiki/Channels

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10414135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档