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

如何在OKHttp客户端连接中显式打开多个流

姚高韵
2023-03-14

我正在使用OkHTTP客户端访问HTTP/2服务器。我有一个用例,我想在同一个连接上打开多个流。

我正在使用以下代码创建OkHTTP客户端。

ConnectionPool connectionPool = new ConnectionPool(5,
                CONNECTION_POOL_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);

        return new OkHttpClient.Builder()
                .connectTimeout(5,TimeUnit.SECONDS)
                .writeTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS)
                .connectionPool(connectionPool)
                .build(); 

此客户端在连接池中可以有5个打开的连接。现在我想使用上面的客户端提出以下请求,

okHttpClient.newCall(request1.build()).execute()
okHttpClient.newCall(request2.build()).execute()

我希望这些请求在同一个连接上作为一个单独的流,而不是一个新的连接。我该怎么做?

共有2个答案

盛嘉
2023-03-14

OkHttp将使用相同的连接作为唯一的服务器地址。每次通过该连接发送的请求都将在新流中消耗。

丁曦哲
2023-03-14

如果符合条件,OkHttp将自动为您的请求使用相同的套接字。请求需要是HTTPS,服务器需要支持HTTP/2,并且您的代码必须在Android 5或Java9上运行。

 类似资料:
  • 在Python中,我将“WebSockets”库用于websocket客户端。 问题是一旦收到响应,客户端websocket连接就会断开。我希望连接保持打开,以便以后可以发送和接收消息。 为了保持websocket打开并能够在以后发送和接收消息,我需要做哪些更改?

  • 我是使用节点js(ws库)开发的网页登录服务器 我想将聊天模块添加到android应用程序。我正在为websocket客户端使用okhttp。当从设备连接时,它正在工作。但是当连接第二台设备时,它不工作。只有第一台设备websocket.on(“消息”)事件发射器会做出响应。另一台设备不监听onMessage。只有一台设备监听A. B- 如何配置onMessage在所有设备上工作? java客户端

  • 我使用这个(Android TCP连接增强的)教程来创建简单的JAVA TCPServer和Android TCPClient。它工作得很好,但使用这段代码我只能同时将一个设备连接到服务器。我必须更改什么才能连接多个设备?

  • 问题内容: 当使用Socket类时,它正在某个端口上建立与服务器的TCP连接,但是ServerSocket能够在服务器上为每个接受请求处理多个客户端连接,并将其委托给线程来处理该请求。但是ServerSocket类如何在同一个端口上接受多个tcp连接。 这是否意味着要由操作系统来决定它允许多少个连接,或者允许的最大积压量是多少,并且可以由OS之上的应用程序控制(我的意思是Java受OS支持的最大积

  • 编辑2:我切换到,并用包装客户端工厂,这样设备就可以很好地到达后端。但是当后端发回一些东西时,我会得到错误的出站套接字,客户机套接字死亡。我认为这是因为后端没有正确路由消息所必需的头。如何捕获此信息?我的配置类如下:

  • 我正在尝试从另一台机器创建与基于java的套接字服务器的多个客户端连接。服务器和客户端都使用Netty 4进行NIO。在服务器端,我使用了boss和Worker group,它能够在单个linux盒上接收和服务器100000并发连接(在设置内核参数和ulimited之后)。 但是,我最终在客户端为每个连接创建了一个新线程,这导致了JVM线程限制异常。 有人能告诉我,我如何使用Netty从客户端创建