错误是 OkHttp3 库在 HTTP/2 通信过程中遇到的一种错误。当 OkHttp3 客户端尝试通过 HTTP/2 协议与服务器建立连接,但服务器拒绝处理该请求流时,就会抛出此错误。这通常意味着服务器由于某种原因无法或不愿意处理该请求。 2. 可能导致 okhttp3 refused_stream 错误的常见原因 服务器配置问题:服务器可能未正确配...
//需要一个新的连接,所以重置一些状态 refusedStreamCount = 0 connectionShutdownCount = 0 otherFailureCount = 0 //第二次,尝试从连接池中获取一个连接,不带路由,不带多路复用 if (connectionPool.callAcquirePooledConnection(address, call, null, false)) { val result = call.connection!! eventListener....
1回答 处理OkHttp HTTP/2 REFUSED_STREAM错误 、 我们使用OkHttp3 (v4.9.1)从Spring应用程序以高度并发的方式建立h2c (HTTP/2,没有TLS)连接。但是,当服务器(基于nginx、单节点、单地址)在达到一定数量的请求后(按照其选项的指示)关闭连接时,我们会观察到零星的错误突发。当发生这种情况时,OkHttp似乎并...
publicHttpStreamnewStream(OkHttpClient client,booleandoExtensiveHealthChecks){//得到连接时长、读超时以及写超时参数intconnectTimeout=client.connectTimeoutMillis();intreadTimeout=client.readTimeoutMillis();intwriteTimeout=client.writeTimeoutMillis();booleanconnectionRetryEnabled=client.retryOnConnectionFailure(...
这个时候需要为call设置一个新的连接 // 2.1 先将部分变量初始化 refusedStreamCount = 0 connectionShutdownCount = 0 otherFailureCount = 0 // 2.2 尝试从连接池中找寻一个合适的连接,这个时候address还未进行dns解析,所以第三个参数routes传入null(也就是第三个参数其实是address通过解析得到的routes) if (...
在OkHttp3中,StreamAllocation是用来建立执行HTTP请求所需网络设施的组件,如其名字所显示的那样,分配Stream。但它具体做的事情根据是否设置了代理,以及请求的类型,如HTTP、HTTPS或HTTP/2的不同而有所不同。代理相关的处理,包括TCP连接的建立,在OkHttp3中的代理与路由一文中有详细的说明。
refusedStreamCount = 0; //以上条件都不满足则new一个 result = new RealConnection(connectionPool, selectedRoute); acquire(result); } // 开始握手 result.connect(connectTimeout, readTimeout, writeTimeout, connectionRetryEnabled); //计入数据库 ...
refusedStreamCount =0; } } RealConnection newConnection =newRealConnection(selectedRoute); synchronized (connectionPool) { acquire(newConnection); Internal.instance.put(connectionPool, newConnection);this.connection = newConnection;if(canceled)thrownewIOException("Canceled"); ...
if(nextStreamId>Integer.MAX_VALUE/2){ shutdown(REFUSED_STREAM); } if(shutdown){ thrownewConnectionShutdownException(); } //每个流的ID streamId=nextStreamId; //下一个流的ID是在当前流ID基础上加2 nextStreamId+=2; //创建新流 stream=newHttp2Stream(streamId,t...
上面注释 1 处创建了一个StreamAllocation对象,注释 2 处 调用了其release方法,注释 3 处则把这个对象传给了下一个 Interceptor。StreamAlloction这个类很重要,下面就看一下它的用途。 StreamAlloction StreamAllocation从名字上看是流分配器,其实它是统筹管理了几样东西,注释写的非常清楚: ...