我的Flutter移动的应用程序与我的后端服务器通信。文档说使用Client
类(IOClient
)比普通的get
,put
等更好。方法来维护对同一服务器的多个请求之间的持久连接。Docs还说:
当每个客户端被使用完后关闭它是很重要的;否则可能导致Dart进程挂起。
我不明白什么时候需要关闭客户端,因为几乎所有的应用程序屏幕都需要HTTP连接到同一个服务器。最好的做法是什么?
更新:
是否可以只在应用程序终止之前关闭Client
,或者我应该在每次应用程序隐藏时关闭它(进入paused
状态)?
5条答案
按热度按时间iecba09b1#
我个人认为,在每个用户操作后关闭客户端是最好的做法。
我所说的“用户操作”可以由多个API请求组成。
所以我认为最好的是这样的:
dxxyhpgq2#
不要关闭HTTP客户端
对于你们中的一些人来说,这可能听起来很奇怪,但解决方案很简单,就像不做一样。
为什么
在大多数情况下,HTTP客户端应该在整个应用程序运行时都可用。此外,当用户关闭应用程序时,应用程序资源会自动丢弃。因此,在大多数情况下,我们不需要处理HTTP客户端的处置。
何时释放HTTP Client?
只有当我们想运行有限的,一次性的,预测的,季节性的HTTP请求。在这种情况下,您可以通过多种不同的方式来处置客户端(取决于您的状态管理或您想要触发处置的生命周期)。
dispose()
函数对于所有处理缓存和本地资源的包都是通用的。文档中提到了这个选项,但并不建议您在每个场景中都使用它。它应该只在非常具体的情况下处理。所以对于大多数人来说,不要丢弃HTTP客户端。
hgtggwj03#
每个服务器交互保持原子连接。
几乎所有的应用程序屏幕都需要HTTP连接到同一服务器
一件事是所有屏幕都进行http调用,另一件事是与服务器进行持续的高频交互。
假设我们有一个多人游戏应用程序,它需要每一秒都与服务器通信。如果是这样的话,让客户端打开将是至关重要的。即使你有架构的后果, dart 过程将挂起。这意味着dart可能不是高服务器流量应用程序的最佳解决方案。
据我所知你的应用程序不是这样的。你不需要担心保持连接打开不断,所以你可以只打开和关闭它每次你需要使用它,而不必支付高性能的价格。
如果你每次尝试使用你的API时都打开一个连接,那么对用户来说应该是“无障碍的”。
话虽如此,这里有一些关于这个主题的其他见解:
希望这能帮助你,根据你的用例,做出更好的决定。
zqdjd7g94#
在网络流量方面,最好在整个应用生命周期中使用相同的客户端。为每个API建立一个新的连接是非常昂贵的。然而,根据documentation,
重要的是关闭每个客户端时,它的完成正在使用;否则可能会导致Dart进程挂起。
另外,如果没有调用client.close(),这并不意味着服务器将永远保持连接打开。如果连接空闲时间超过HTTP Keep-Alive Timeout,服务器将关闭连接。在这种情况下,如果客户端通过服务器关闭的连接发送一个新的请求,他将得到一个408 Request Timeout。
因此,如果您决定在整个应用程序生命周期中使用相同的客户端,请记住您可能遇到的两个问题。
1mrurvl15#
关闭HttpClient HttpClient支持持久连接,并缓存网络连接,以便尽可能将它们重用于多个请求。这意味着网络连接可以在请求完成后保持打开一段时间。使用HttpClient.close强制HttpClient对象关闭并关闭空闲的网络连接。
我们必须阅读docs:
https://api.flutter.dev/flutter/dart-io/HttpClient-class.html