我最近将我现有的为每个请求创建一个新客户端的实现更改为一个标准的单例客户端。
现在当我开始阅读文档时,我发现还有一个叫做缓存的东西正在被使用。有一些内容说有多个缓存试图访问同一个缓存目录可能最终导致它们相互踩踏并导致崩溃。
我正在查看的文档在他们的 github 存储库中:
我的问题:
我没有专门为我的客户端设置任何缓存或缓存控制。只有几个超时值和一个连接池。如果我为每次调用使用新的请求和响应对象,默认情况下会进行任何缓存吗?
client = new Okhttpclient.Builder()
. connectTimeout (10000,TimeUnit.MILLISECONDS)
.readTimeout(15000,TimeUnit.MILLISECONDS)
. connectionPool (new ConnectionPool ())
.build();
上面的客户端设置为单例并返回给所有调用 servlet。请求被创建为
Request req = new Request.Builder()
.url(someurl)
.get()
.build();
Response res = client.newCall(req).execute();
如果是这样,是否会出现上述踩踏部分的问题。我根本不需要缓存,因为大多数情况下我只是将东西写入另一台服务器,当我阅读时,我确实需要它是当前值而不是缓存一个......所以我需要明确设置缓存吗-control 设置为 force-network 还是我的默认未指定设置相同?
编辑:这是文档的响应缓存部分的摘录
要缓存响应,您需要一个可以读取和写入的缓存目录,以及对缓存大小的限制。缓存目录应该是私有的,不受信任的应用程序应该无法读取其内容!
让多个缓存同时访问同一个缓存目录是错误的。大多数应用程序应该只调用一次 new OkHttpClient() ,使用它们的缓存配置它,并在任何地方使用相同的实例。否则,这两个缓存实例将相互践踏,破坏响应缓存,并可能使您的程序崩溃。
OkHttp 缓存目录是为每个客户端实例设置的。该文档告诉您的是,您不应将多个客户端配置为使用相同的缓存目录。缓存必须显式启用,并且未在您问题的代码段中启用。
在客户端实例上配置缓存后,您可以控制每个请求的响应缓存。请参阅缓存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句