问题:
我正在使用.NET类AsyncStorage.getItem('userToken').then((token) => {
this.setState({hasToken: token !== null,localToken : token})
});
向端点URL发出请求。
我的代码:
HttpClient
已确定问题:
如果我使用using (HttpClient apiClient1 = new HttpClient())
{
apiClient.GetAsync(apiUrl).Result;
}
块,则表示我正在打开多个连接,并指向using
。
将我的上述验证码更改为:
socketExceptions
将public class RequestController: ApiController
{
private static HttpClient apiClient = new HttpClient();
[HttpPost]
public dynamic GetWebApiData([FromBody] ParamData params)
{
var resultContent = apiClient.GetAsync(apiUrl).Result.Content;
return Newtonsoft.Json.JsonConvert.DeserializeObject<object>(resultContent.ReadAsStringAsync().Result);
}
}
设为HttpClient
后,上述代码的结果如下:
仅建立了一个连接。
对于每个请求,我都希望减少200毫秒 响应时间。
我需要什么:
我想通过高速响应拨打至少50个电话到终点。
在这种情况下请帮助我。
答案 0 :(得分:8)
使用异步API并停止调用.Result
阻止调用。
public class RequestController: ApiController {
private static HttpClient apiClient = new HttpClient();
[HttpPost]
public async Task<IHttpActionResult> GetWebApiData([FromBody] ParamData data) {
var response = await apiClient.GetAsync(apiUrl);
var resultContent = response.Content;
var model = await resultContent.ReadAsAsync<dynamic>();
return Ok(model);
}
}
答案 1 :(得分:0)
HttpClient的默认SSL连接空闲超时为2分钟。因此,在那之后,您必须与服务器重新握手。这可能是根本原因。
您可以按照本文(https://www.stevejgordon.co.uk/httpclient-connection-pooling-in-dotnet-core)来延长超时时间。但是从我这边的测试结果来看,我只能延长5分钟。之后,连接将关闭。