Время ожидания GCM и отказ в соединении после отправки 5000 push-уведомлений

Мне нужно отправлять 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


person Anton Rey    schedule 10.06.2016    source источник


Ответы (1)


Когда вы столкнетесь с ERR_CONNECTION_REFUSED, проверьте подключение к Интернету, проверьте все кабели и перезагрузите все маршрутизаторы, модемы или другие сетевые устройства, которые вы можете использовать. Ошибка в основном возникает из-за проблем с подключением к Интернету, а также из-за проблем с устройствами, которые вы используете для подключения к Интернету. Следуйте действиям, указанным в этой ссылке, чтобы решить эту проблему.

Судя по этой теме, в корпоративных сетях может возникнуть множество проблем, поскольку брандмауэры могут блокировать доступ к довольно необычному порту, или прокси-серверы могут мешать исходящему трафику. Исключение указывает на проблему с сетью с вашей стороны - просто истекло время ожидания. Думаю, здесь не проблема ни Google, ни вашего провайдера. Проверьте свои настройки и любые брандмауэры (корпоративные или личные) между вами и внешним Интернетом.

person abielita    schedule 11.06.2016