当前位置: 首页 > 知识库问答 >
问题:

UrlConnection API调用在第一次调用时要花费更多的时间,然后再继续调用,这与curl相当。邮递员

仲孙昊焱
2023-03-14

我观察到,如果第一次通过Java(URLConnection或Apache Http Client或OKHttp)调用我的一个api,需要更多的时间。对于后续的通话,时间要少得多。

虽然邮递员或卷发。exe所花费的时间非常少(与java的第二次迭代相当)

对于我的机器,第一次开销大约为2秒。但在一些机器上,这是第一次上升到5-6秒左右。此后,往返时间约为300毫秒。

以下是我的示例代码:

public static String DoPostUsingURLConnection(String s_uri) throws Exception {
        try {
            URL uri = new URL(s_uri);
            HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
            // Logger.log("Opened Connection");
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);

            connection.setRequestProperty("Authorization", authorizationHeader);

            // Create the Request Body
            try (OutputStream os = connection.getOutputStream()) {
                byte[] input = jsonRequestBody.getBytes("utf-8");
                os.write(input, 0, input.length);
            }

            // Logger.log("Written Output Stream");

            int responseCode = connection.getResponseCode();
            InputStream is = null;
            if (responseCode == HttpURLConnection.HTTP_OK)
                is = connection.getInputStream();
            else
                is = connection.getErrorStream();

            BufferedReader in = new BufferedReader(new InputStreamReader(is));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine).append("\n");
                ;
            }
            in.close();

            return response.toString();

        } catch (Exception ex) {
            return ex.getMessage();
        } finally {
            // Logger.log("Got full response");
        }

共有1个答案

毕衡
2023-03-14

这只是猜测。但是Http连接的工作方式是,当你第一次调用它时,连接会建立起来,这需要时间。在那之后,Http协议在一段时间内不会真正关闭连接,因为预计会有更多的请求出现,连接可以重新使用。在你的情况下,你确实发送了后续的请求,这些请求重新使用以前创建的连接,而不是重新建立它,这是扩展的。我已经编写了自己的开源库,其中有一个简单的Http客户端。我注意到相同的效果,第一次请求比后续请求花费更长的时间。但这并不能解释为什么在邮递员和卷发中我们看不到同样的效果。无论如何,如果你想解决这个问题,并且你提前知道你的网址,在你的应用初始化时发送一个请求(你甚至可以在单独的线程中完成)。那会解决你的问题

 类似资料:
  • 我正在使用webClient调用endpoint并希望将我得到的响应映射到另一个对象。在映射该对象时,我想对响应的某些参数进行额外调用。 我的第一个调用返回以下对象 我把这种反应描绘成这样: 在getCollectionContent方法中,我迭代设置数组,从响应中提取数据并将其映射到PageContent对象。 如果响应包含类型“String”,我只需将数据添加到消息对象中,并将其添加到页面内容

  • 到目前为止,我做到了: 我的Ajax1函数返回ajax对象。我的等待函数看起来像这样: 问题是第二个ajax请求函数(Ajax2)并没有等待等待函数!编辑:我也试过: 什么也没变。从jQuery文档: 在将多个延迟对象传递给jQuery.when的情况下,该方法将从新的“master”返回promise“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当

  • 问题内容: 我过去一直在努力,今天一直在努力的事情是阻止API / AJAX继续进行,直到您收到响应为止。目前,我正在使用Facebook API。我需要从调用中获取响应,然后将其返回,但是正在发生的事情是,在我从未从API调用中获取响应之前,我的函数正在返回。我知道为什么会这样,我只是想不出如何预防!这是我的代码… // -----编辑 我注意到有人建议这样的事情… 但这返回未定义 //根据更新

  • [VB.net]大家好, 我的代码有一个小问题。我的家里有一台现有的服务器,我正在尝试创建与服务器的连接,它可以正常工作。我现在的问题是,第一次调用,如果是登录或其他方法,它总是需要大约10秒:在第一次调用之后 然后,当我调用第一个调用时,会发生以下情况:在此处输入图像描述 这是我的AppConfig:

  • 问题内容: 我想我在这里描述的可能有个名字,但我不知道。所以我的第一个问题是要知道这种技术的名称。 这是一个示例:假设您正在网页上实现实时搜索。每次用户在搜索框中键入内容时,您都会触发一个新的搜索查询,并且结果会尽可能频繁地更新。这是一件愚蠢的事情,因为您发送的查询会超出实际需要。每2-3个字母发送一次请求,或者每100 ms最多发送一次请求就足够了。 因此,一种技术是安排在键入键之后立即执行的查

  • 本文向大家介绍ajax的定时调用每5秒调用一次,包括了ajax的定时调用每5秒调用一次的使用技巧和注意事项,需要的朋友参考一下