gpt4 book ai didi

tcp - 带 Aleph 的 Clojure TCP 服务器

转载 作者:可可西里 更新时间:2023-11-01 02:32:46 36 4
gpt4 key购买 nike

我正在尝试使用 Aleph 编写一个简单的 TCP 服务器。一切正常,除了我不确定应该如何检测 channel 何时关闭。

来自documentation :

When the client closes the connection, both sides of the channel will be immediately sealed. The final message from the channel will be nil

但是,我似乎从来没有收到过这个最终的 nil信息。如果我检查 channel ,我确实看到它已关闭。这是我的代码:

(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 消息?我可以有一个单独的线程监视我的 channel 并检查它们是否已关闭,但这似乎是一个糟糕的设计。我更愿意使用 Aleph,但现在看起来我需要使用原始 Netty 处理程序。直接使用 Netty 会很好,但如果可能的话,我更愿意使用 Aleph,因为它感觉更加地道。

最佳答案

To register a callback for when a channel is closed or drained, use (on-closed ch callback) or (on-drained ch callback), which both take a callback with zero arguments.

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

关于tcp - 带 Aleph 的 Clojure TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414135/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com