Я бы хотел проверить функцию http2 okhttp. И я делаю несколько запросов на один и тот же хост в асинхронном стиле. Но я обнаружил, что это связано с несколькими соединениями, поскольку протокол h2, он должен использовать только одно соединение, верно? Код ниже. Ах, я использую okhttp2.5При использовании http2 в okhttp, почему несколько запросов к одному и тому же хосту не использовали только один connectoin
public class Performance {
private final OkHttpClient client = new OkHttpClient();
private final Dispatcher dispatcher = new Dispatcher();
private final int times = 20;
public Performance(){
dispatcher.setMaxRequestsPerHost(2);
client.setDispatcher(dispatcher);
// Configure the sslContext
// MySSLSocketFactory mySSLSocketFactory = new MySSLSocketFactory();
// client.setSslSocketFactory(mySSLSocketFactory);
// client.setHostnameVerifier(new HostnameVerifier() {
// public boolean verify(String s, SSLSession sslSession) {
// return true;
// }
// });
}
public void run()throws Exception{
for(int i=0; i<times; i++) {
Request request = new Request.Builder()
.url("https://http2bin.org/delay/1")
.build();
client.newCall(request).enqueue(new Callback() {
public void onFailure(Request request, IOException e) {
e.printStackTrace();
}
public void onResponse(Response response) throws IOException {
System.out.println(response.headers().get("OkHttp-Selected-Protocol"));
}
});
}
}
public static void main(String[] args)throws Exception{
Performance performance = new Performance();
performance.run();
}
}
Пожалуйста, объясните, как вы знаете, что ваши запросы проходят через несколько соединений. – dsign
Я получаю заключение по следующим причинам: 1. при изменении диспетчера ** maxRequestsPerHost ** результат изменяется соответствующим образом, поэтому я использую путь/delay/1 для теста. ** maxRequestsPerHost ** означает количество подключений или просто количество запросов, несмотря на то, что несколько запросов могут быть выполнены только в одном соединении? ; 2. Я сравниваю производительность с HTTP1.1 с использованием другого пути, например/get, кажется, что нет различий в производительности, независимо от того, сколько запросов я задал. –
Можете ли вы подтвердить, что получаете соединение HTTP/2? Обратите внимание, что вам понадобится Jetty-ALPN на рабочем столе. –