2

gcm サービス全体で 1 秒あたり 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.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190) で org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) で拒否されました。 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) の impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643) 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.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) で実行 (SenderThread.java:76) java.util.concurrent.FutureTask.run(FutureTask.java:266) で.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

接続がタイムアウトしました

原因: java.net.ConnectException: 接続タイムアウト: java.net.DualStackPlainSocketImpl.connect0(Native Method) で接続: 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) で) java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) で java.net.Socket.connect(Socket.java:589) で sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668) で org org.apache.http.impl の .apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)。conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ... 13 詳細

4

1 に答える 1

0

が発生した場合はERR_CONNECTION_REFUSED、インターネット接続を確認し、ケーブルを確認して、使用している可能性のあるルーター、モデム、またはその他のネットワーク デバイスを再起動します。エラーは主に、インターネット接続の問題が原因で発生し、インターネットへの接続に使用するデバイスに問題がある場合に発生します。このリンクの手順に従って、この問題を解決してください。

このスレッドに基づくと、企業ネットワークでは多くの問題が発生する可能性があります。これは、ファイアウォールが通常とは異なるポートへのアクセスをブロックしたり、プロキシが送信トラフィックを妨害したりする可能性があるためです。この例外は、ネットワークに問題があることを示しています。単にタイムアウトになっているだけです。ここでは、Google もプロバイダーも問題ではないと思います。セットアップと、外部インターネットとの間のファイアウォール (企業または個人) を確認してください。

于 2016-06-11T05:54:48.537 に答える