Мне нужно отправлять 500 push-уведомлений в секунду через службу gcm. К сожалению, в отличие от chrome49, я должен шифровать сообщение для каждого клиента chrome50, ключи шифрования указаны в заголовке запроса. После отправки более 5000 сообщений я получаю сообщение «Тайм-аут и соединение отклонено» от https://android.googleapis.com/gcm/send и он перестает работать на некоторое время, а затем периодически работает нормально
Публикация запросов в потоках
try {
String path = "https://android.googleapis.com/gcm/send";
URI uri = new URIBuilder()
.setPath(path)
.build();
HttpPost httpPost = new HttpPost(uri);
httpPost.addHeader("Accept", "application/json");
httpPost.addHeader("Content-Encoding", "aesgcm");
httpPost.addHeader("Cache-Control", "no-cache");
httpPost.addHeader("Connection", "Keep-Alive");
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("Authorization", "key=" + appKey);
httpPost.addHeader("Encryption", encryptionHeader);
httpPost.addHeader("Crypto-Key", cryptoKeyHeader);
httpPost.setEntity(new StringEntity(jsonFromData));
HttpResponse response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity).replace("%", "@");
LOGGER.info(responseString);
} catch (Exception e) {
e.printStackTrace();
}
Исключение: в соединении отказано
org.apache.http.conn.HttpHostConnectException: в подключении к https://android.googleapis.com отказано в org. apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:190) в org.apache.http.impl.conn.ManagedClientConnectionImpl.open (ManagedClientConnectionImpl.open (ManagedClientConnectionapache.java:294). DefaultRequestDirector.tryConnect (DefaultRequestDirector.java:643) по адресу org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java:479) по адресу org.apache.http.impl.client Abstract.AbstractClient. 906) на org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:805) на org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:784) на com.mpsdevelopment.p .threads.SenderThread.sent (SenderThread.java:100) в com.mpsdevelopment.push.threads.Se nderThread.run (SenderThread.java:76) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util .concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (Thread) .java
Время соединения истекло
Вызвано: java.net.ConnectException: время ожидания соединения истекло: подключитесь к java.net.DualStackPlainSocketImpl.connect0 (собственный метод) к java.net.DualStackPlainSocketImpl.socketConnect (DualStackPlainSocketImpl.java:79) в java.net.AbstractImplain. AbstractPlainSocketImpl.java:350) на java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:206) на java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:188.connect) на javaSocketImpl.java:188.Connect. ) на java.net.SocksSocketImpl.connect (SocksSocketImpl.java:392) на java.net.Socket.connect (Socket.java:589) на sun.security.ssl.SSLSocketImpl.connect (SSLSocketImpl.java:668) на org .apache.http.conn.ssl.SSLSocketFactory.connectSocket (SSLSocketFactory.java:414) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:180) ... еще 13