gpt4 book ai didi

c# - 具有不同 session 的 HttpClient 共享实例

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:57 25 4
gpt4 key购买 nike

上下文

使用HttpClient 的推荐方法是创建一个实例并共享它(根据 Microsoft 文档)。有许多示例在每个请求(在服务器上)使用 HttpClient 产生问题。

问题

在我的情况下,我必须同时运行 20 个不能相互干扰的“ session ”。 “ session ”是指对一个或多个服务的一组隔离操作。这些 session 之间不应共享任何数据,尤其是 cookie。

这些 session 是持久的 session (可以持续数天)。但是同时最多只能有20个并发 session 。在实例化这些 session 时缓慢启动是可以接受的(最多 5 秒)。

问题

我应该使用游泳池吗?我应该重用相同的 HttpClient 实例吗?我应该生成最多 20 个 HttpClient 吗?此外,考虑到它们同时运行,假设对单个 HttpClient 的并发调用将被阻塞是否正确?

最佳答案

建议只创建一个 HttpClient 实例,因为它会创建一个持续一段时间的 TCP 连接。最终,它会自然地收集或关闭垃圾,但与此同时,您可能会耗尽服务器上打开的最大连接数。每个连接也有一点资源利用,这在堆叠时可能会出现问题。

但是,这是没有硬性规定的事情之一。某些事情,比如为每个操作创建一个新的 HttpClient,显然是有问题的,但通常每个请求一个实例到您的服务器(不是每个通过 HttpClient 发送的请求)不应该是除非您正在为大量并发请求提供服务,否则会有问题。

您也可以在整个应用程序中将其设置为单例。 HttpClient 在技术上不是特定于用户或 session 的东西。如果您更改的默认 header 不应该跨 session 泄漏,那么只会有问题。例如,您希望在创建请求时附加类似 Authorization header 的内容,而不是在设置客户端时作为默认 header 。只要您知道如何使用它,共享它就没有问题。不过,“聪明地使用它”有时可能会导致失败。即使你是,下一个开发者会是。更重要的是,他们会知道他们应该吗?您甚至可能会忘记自己。

就我个人而言,我会开始将其设为请求范围,其中对您的 Web 应用程序的每个请求都会获得一个单独的实例,但在该请求期间,该实例将用于 HttpClient 的所有操作。然后您可以进行一些分析以查看服务器如何处理此问题,如果它确实成为问题,那么您可以寻找替代解决方案。

关于c# - 具有不同 session 的 HttpClient 共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48561678/

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