gpt4 book ai didi

c# - Singleton vs PrEcision vs PerCall 状态管理

转载 作者:行者123 更新时间:2023-11-30 17:08:46 27 4
gpt4 key购买 nike

我有一个正在传输大文件的 WCF 服务。

目前我正在使用单例服务和我类中的实例列表来保存状态并响应客户端对传输进度的请求等等。

实例化类本身在需要时为每次传输处理新线程。

添加传输请求和请求进度的客户端可以同时断开连接并在随机时间重新连接。

还有几个不同的客户端可能想要请求所有正在进行的传输的进度。

目前一切正常,但我确定有更好的方法吗?

在 SQL 中以某种方式存储状态?像我目前正在做的那样存储状态并以某种方式重新连接到同一个实例?那么如何获取所有实例的数据呢?

我希望你能理解我相当长的问题:)

最佳答案

如果您的 WCF 服务只有一个实例,您的解决方案会很有效。

当您使用负载均衡实例化超过 1 个实例时,该方法将不起作用。
在这种情况下,您需要保持状态是所有实例共有的某个地方。它可以是 SQL、状态服务器、另一个可以保持状态的 WCF 服务等。

更新:
您需要为每个文件传输任务生成 id。然后 Singletone 可以将 id 与执行传输的实例相关联(我们称之为 Executor)。
当客户端想要获取进度或取消传输时,它会请求 Singleton 并提供任务 ID。
Singletone 应该使用 task id 来解析实际的 Executor 并将 client 的请求转发给正确的 Executor。

因此,您将能够根据需要实例化任意数量的执行器。客户端不应该担心究竟是哪个 Executor 处理文件。客户应该知道的一切都是任务 ID。

关于c# - Singleton vs PrEcision vs PerCall 状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515973/

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