首页 » SEO优化 » phpudp设置超时技巧_探索Apache HttpClient超不时光若何设定

phpudp设置超时技巧_探索Apache HttpClient超不时光若何设定

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

最近在项目碰着了通过HTTP要求,调用第三方接口的问题。

一、Apache HttpClient仿照POST要求,调用第三方接口

Apache HttpClient是一个盛行的Java库,用于发送HTTP要求。

phpudp设置超时技巧_探索Apache HttpClient超不时光若何设定

我们可以利用该库来仿照POST要求。

phpudp设置超时技巧_探索Apache HttpClient超不时光若何设定
(图片来自网络侵删)
1、发起POST要求:

@Controller@RequestMapping("/client")public class TestController { private static final String url = "http://127.0.0.1:8080/MyProject/nezha/getUser"; @RequestMapping(value = "/getUser", method = RequestMethod.POST) @ResponseBody public User getUser(@RequestBody User user) { System.out.println("要求参数:"+user); String json = JSON.toJSONString(user); String userRet = HttpUtil.sendHttpPost(url, json); User ret = JSON.toJavaObject(JSONObject.parseObject(userRet), User.class); System.out.println("HttpPost办法发送POST要求:"+ret); return ret; }}2、仿照做事端

@Controller@RequestMapping("/server")public class PostServerController { @RequestMapping(value = "/getUser", method = RequestMethod.POST) @ResponseBody public User getUser(@RequestBody User user) { user.setInfo("getUser,我 OK 啦"); System.out.println(user); return user; }}3、通过postman测试一下

4、Apache HttpClient

public class HttpUtil { / HttpPost办法 发送POST要求 / public static String sendHttpPost(String url, String data) { String response = null; try { CloseableHttpClient httpclient = null; CloseableHttpResponse httpresponse = null; try { httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000) //连接超时时间 .setSocketTimeout(5000) //读取数据超时时间 .build(); httppost.setConfig(requestConfig); StringEntity stringentity = new StringEntity(data, ContentType.create("application/json", "UTF-8")); httppost.setEntity(stringentity); httpresponse = httpclient.execute(httppost); response = EntityUtils.toString(httpresponse.getEntity()); } finally { if (httpclient != null) { httpclient.close(); } if (httpresponse != null) { httpresponse.close(); } } } catch (Exception e) { return null; } return response; }}

大家把稳到了吗?HttpClient须要配置一个连接超时时间和读取数据超时时间。
在配置的时候,我也是根据以往的履历,大概的配置了一下,这个数值怎么界定,也是没有一个准确的说法。

二、HTTP超时时间1、众所周知,HTTP利用的是TCP/IP 协议。

TCP/IP协议是能够实现多个不同网络间信息传输的协议簇,它包括以下几个紧张的协议:

传输掌握协议(TCP):是一种面向连接的协议,它供应了一种可靠的数据传输做事,通过序列号、确认号、重传和流量掌握等机制来实现数据的传输。
互联网协议(IP):是一种无连接协议,它卖力将数据分组在网络上进行传输。
IP协议通过将数据分组封装在一个个数据包中,并在每个数据包中包含源地址和目的地址,来实现数据在网络上的传输。
用户数据报协议(UDP):是一种无连接协议,它供应了一种大略的数据传输做事,但是它并不能担保数据的可靠性和顺序。
UDP常日用于一些不须要可靠传输的场景,例如音频和视频流传输等。
地址解析协议(ARP):该协议用于将网络层的IP地址解析为数据链路层的MAC地址。
反向地址解析协议(RARP):该协议用于将数据链路层的MAC地址解析为网络层的IP地址。
动态主机配置协议(DHCP):该协议用于动态地分配IP地址和其他网络配置参数。
网络韶光协议(NTP):该协议用于在网络上同步韶光。
大略邮件传输协议(SMTP):该协议用于在网络上传输电子邮件。
文件传输协议(FTP):该协议用于在网络上进行文件传输。

除了上述协议外,TCP/IP协议簇还包括其他一些协议,如Telnet、SNMP、HTTP、HTTPS等。
这些协议在不同的运用处景中发挥着重要的浸染。

2、TCP/IP超时时间设置

TCP/IP协议中的超时时间是指网络在传输数据时,等待数据包返回确认信息的韶光。
详细来说,当一个数据包被发送到网络中后,发送方会等待吸收方的确认信息,以确定数据包是否已经被成功吸收。
如果超过了一定的韶光,还没有收到确认信息,那么发送方就会认为数据包已经丢失,然后会重新发送数据包。
这个一定的韶光便是TCP/IP协议中的超时时间。

TCP/IP协议中的超时时间可以通过“重试次数”和“初始超时时间”来设置。
重试次数是指发送方在未收到确认信息时,重新发送数据包的次数;初始超时时间是指发送方等待确认信息的初始韶光。
这两个参数常日可以根据详细情形进行调度,以知足不同的网络传输需求。

一样平常来说,TCP/IP协议中的超时时间该当在几百毫秒到几秒之间。
详细的韶光取决于网络状况、数据包的大小以及数据传输的间隔等成分。
如果超时时间设置得太短,可能会导致不必要的重试次数,摧残浪费蹂躏网络资源;如果超时时间设置得太长,可能会导致传输延迟,影响网络性能。
因此,在设置TCP/IP协议中的超时时间时,须要根据详细情形进行综合考虑。

3、HTTP连接超时时间如何设置?

一样平常来说,TCP 三次握手建立连接须要的韶光非常短,一样平常都在毫秒级。

如果十几秒、乃至几十秒都无法连接,很可能是网络问题或者防火墙问题,大概率是永久无法连接了。

因此连接超时时间一样平常不会设置的太大,2-6秒即可。

须要把稳的是,现在的程序开拓中,一样平常都是利用Nginx 的反向代理来负载均衡,客户端连接的实在是 Nginx,而不是做事端。

4、HTTP读取超时时间如何设置?

(1)先理解一下什么是读取超时?

一样平常来说,连接超时,指的便是网络连接超时。

那么读取超时呢?

在我看来,读取超时包括了Http要求的网络韶光+做事端接口处理业务逻辑的韶光+数据返回的网络韶光。

因此,如果发生了读取超时,是无法判断是网络超时还是接口实行超时的。

(2)读取超时时间越大越好吗?

很多小伙伴会有这样的想法,那我将读取超时时间设置的足够大,足够你网络+业务实行的韶光了,不就万事OK了嘛!

真的是这样吗?

一样平常情形下,Http要求都是同步调用,如果设置的足够大,每每会影响客户端程序的实行效率,如果是高并发场景,后果不堪设想,异步的时候可以,这也是异步的运用处景之一。

(3)读取超时时间大于接口的实行韶光,第三方接口实行会中断吗?

下面将读取超时时间设置为5秒,为了仿照效果,将第三方接口的实行韶光设置为10秒。

也便是说读取超时时间大于接口的实行韶光,没等实行完呢,由于读取超时,Http要求断开了。

此时,第三方接口实行会中断吗?

调用 client 接口后,从日志中可以看到,客户端 5 秒后涌现了 SocketTimeoutException,缘故原由是读取超时,第三方接口却丝毫没受影响在 5 秒后实行完成。

众所周知,Tomcat的web做事器是将要求提交到线程池实行的,只要做事端收到了要求,网络层的超时和断开不会影响做事真个实行。

说了这么多,HTTP读取超时时间如何设置?

就像一开始的时候说的,根据程序的实际情形和性能哀求进行设置,没有一个明确的标准。

就像《夜行者》中所说,这个天下本就没有什么白与黑之分。

很多事情都没有一个明确的答案。

标签:

相关文章

西宁济南,双城关键词优化之路

在信息化时代,网络营销已成为企业获取市场优势的重要手段。关键词优化作为网络营销的核心,对于提升网站排名、增加流量具有至关重要的作用...

SEO优化 2025-03-21 阅读0 评论0

SEO云优,助力企业实现互联网营销新突破

越来越多的企业开始重视网络营销。SEO(搜索引擎优化)作为网络营销的重要手段,已经成为了企业获取流量、提升品牌知名度的关键。在众多...

SEO优化 2025-03-21 阅读0 评论0