httpclient 传输数据太大服务端收到为空_10年程序员闲谈HttpClient

本文介绍了HttpClient在传输数据时可能遇到的问题,如数据丢失,以及如何正确设置HttpClient的参数,包括SO_TIMEOUT、TCP_NODELAY等,以确保稳定性和性能。同时讨论了连接池参数的配置,如MaxTotal和DefaultMaxPerRoute,并给出了使用HttpClient的示例代码。最后提到了Keep-Alive机制和线程安全问题,强调了Content-Length设置的重要性。
摘要由CSDN通过智能技术生成

如果我说,写技术文章会上瘾,你信么?当遇到不熟悉的技术,想办法去理解,去总结,并记录下来,它就会变成你的东西。

记得去年时的一个项目,由于对方没有接入SOA服务,只能基于httpclient进行http请求,当时使用HttpClient时,由于缺乏经验,只能照搬别人的参数模板,使用之后才发现这里的坑有多深,也许这些坑大家都可能踩过,今天就总结下使用httpclient的正确姿势,目前用的比较多的版本是3.1和4.2.3。

HttpClient参数说明

当使用HttpClient的项目上线之后,不出问题还好,一旦出了问题就很难排查,但大部分都是由于对参数不了解,随意设置导致的,下面以4.2.3为例,对参数进行说明:

  1. SO_TIMEOUT "http.socket.timeout"
  2. 设置从socket套接字中读取数据的等待时间,在规定时间内读取不到数据,则抛出异常,一般设为2 * 1000,如果想深入了解这个参数,可以查看本地方法socketRead0的实现:
private native int socketRead0(FileDescriptor fd, byte b[], int off, int len, int timeout) throws IOException;
  1. TCP_NODELAY "http.tcp.nodelay"
  2. 确定是否使用Nagle算法,什么是Nagle算法?
  3. Nagle算法试图最大限度地减少发送的段数,以节省带宽。
  4. 当应用希望减少网络延迟,并提高性能,可以禁用Nagle算法,即开启TCP_NODELAY,数据将提前发送,代价是增加带宽。
  5. SOCKET_BUFFER_SIZE http.socket.buffer-size
  6. 用来设置接收/发送HTTP消息的内部套接字缓冲区的大小。
  7. SO_LINGER http.socket.linger
  8. 以秒为单位设置超时时间,该设置仅影响套接字关闭的情况。
  9. 0 表示禁用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值