我需要通过 gcm 服务每秒发送 500 个推送通知。不幸的是,与 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.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) 在 org.apache.http 的 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190) 被拒绝。在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 在 org.apache.http.impl.client.AbstractHttpClient.execute( AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) at com .mpsdevelopment.push.threads.SenderThread.sent(SenderThread.java:100) 在 com.mpsdevelopment.push.threads.SenderThread。run(SenderThread.java:76) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at 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.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 更多