gpt4 book ai didi

clojure - 如何确定何时从作者端关闭 core.async channel ?

转载 作者:行者123 更新时间:2023-12-04 13:39:05 25 4
gpt4 key购买 nike

我有一个基本上是长轮询实现的一部分的过程。简而言之,客户端向服务器发出请求,然后服务器创建一个 channel 并将其返回给该客户端。该 channel 将包含客户要求的信息。因为这旨在用于长轮询,所以客户端请求的信息可能会更改。如果信息发生变化,服务器会将更新写入 channel ,理论上,客户端可以获取更新并反射(reflect)该更新。

我面临的问题是我有可能最终拥有大量 channel ,这可能会在发生更新时导致不必要的处理。我可能会更新客户不再关心的 channel 。

我的解决方案是,一旦客户端不再关心信息,它就会关闭 channel ,这会以某种方式通知服务器,并阻止服务器进行额外的处理和更新。

服务器如何知道 channel 是否关闭?在这种情况下,服务器本质上是一个写入器,不从 channel 读取任何内容。此外,所有写入方法都包含在一个 go 块中,因此它始终返回一个 channel (我没有看到任何 nils)。有没有办法做到这一点,或者我的方法完全关闭?

谢谢

最佳答案

截至今年早些时候,有一个名为“putret”的新功能,此更改使得如果由于 channel 关闭而导致 put 失败,则所有 put 函数都会返回 false。这允许像这样的习语:

(when (>! c val)
(recur (next itms)))

关于clojure - 如何确定何时从作者端关闭 core.async channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912971/

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