我需要每秒在gcm服务上发送500个推送通知。不幸的是,与chrome49不同,我必须为每个chrome50客户加密消息,加密密钥在请求标头中指出。在发送了5000条以上的消息后,我收到Timeout&连接拒绝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.java:294) 在 org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 在 com.mpsdevelopment.push.threads.SenderThread.sent(SenderThread.java:100) 在 com.mpsdevelopment.push.threads.SenderThread.run(SenderThread.java:76) 在 java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)
连接超时
引起:java.net.ConnectException:连接超时:连接 在java.net.DualStackPlainSocketImpl.connect0(本地方法)at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at java.net.Socket.connect(Socket.java:589)at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414) 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ......还有13个
答案 0 :(得分:0)
当您遇到ERR_CONNECTION_REFUSED
时,请检查您的互联网连接,检查所有电缆并重新启动您可能正在使用的任何路由器,调制解调器或其他网络设备。该错误主要是由于互联网连接中的问题以及用于连接到互联网的设备存在问题。按照steps in this link解决此问题。
基于此thread,企业网络中可能出现许多问题,因为防火墙可能会阻止访问相当不寻常的端口或代理可能会干扰任何传出流量。该例外表明您的网络问题 - 它只是暂停。我想谷歌和你的提供商都不是问题所在。检查您和外部互联网之间的设置和任何防火墙(公司或个人)。