2016-10-07 14 views
0

GCMメッセージを送信するアプリケーションサーバーを開発中です。私のアプリケーションサーバーは、HTTPプロトコルを使用してGCM接続サーバーにポストリクエストを送信しています。要求の平均応答時間は許容されます(約100ミリ秒)が、時には1秒を超える時間の応答が得られることもあります。場合によっては、2、4秒またはそれ以上の応答時間があります。 このライブラリgcm-serverを使用して、GCMサーバーにリクエストを送信しています。私はそれがGoogleによって所有されていると信じています。 問題にもかかわらず、私はgcm-serverライブラリのコードでいくつか分析しましたが、ヒントや答えは見つかりませんでした。最終的に、GCMサーバーに有効な投稿を含むカールを送信することにしました。結果は同じです。私はこれが期待された動作ではないと確信しています、多分私は何か間違っているが、それが何であるかを見つけたり理解したりすることはできません。Http GCMサーバーへの投稿を送信する応答時間が非常に高い

以下は、これをテストするために実行しているスクリプトです。 Keep-Alive(デフォルトでは、cURLはKeep-Aliveを有効にしています)の定義なしに、GCMに1000件の投稿リクエストを送信しています。

#!/bin/bash 

for i in {1..1000}; do 

    curl -s -w "%{http_code} - %{time_total}\n" -o /dev/null -X POST -H "Content-Type: application/json" -H "Authorization: key={putHereOneGCMValidToken}}" -H "Cache-Control: no-cache" -d '{ 
     "collapse_key": "92667ba1-c8e9-4018-bf14-156417065641", 
     "delay_while_idle": false, 
     "data": { 
     "field1": "value1", 
     "field2": "value2" 
     }, 
     "time_to_live": 0, 
     "registration_ids": [ 
     "REGISTRATION_ID_1", 
     "REGISTRATION_ID_2", 
     "BAD_REGISTRATION_ID" 
     ] 
    }' "https://gcm-http.googleapis.com/gcm/send"; 
    sleep 0.2; 

done 

参考:

答えて

0

あなたはあまりにも多くのダウンストリームメッセージングを使用してサーバーをキューイングされています。より低いテスト番号で送信してください。複数のデバイスやユーザーにテストや送信を行う場合は、Device Group MessagingまたはSend Messages to Topicsを試してください。

デバイスグループメッセージングは​​

  • デバイスグループメッセージングでは、アプリケーションサーバは、グループに属するデバイス上で動作しているアプリの複数のインスタンスを単一のメッセージを送信することができます。

  • GCMトピックメッセージングアプリサーバは、特定のトピックにオプトインしている複数のデバイスにメッセージを送信することができますトピックにメッセージを送信します。

また、メッセージの受信の遅延のために間欠的なインターネット接続のような外的要因も考慮する必要があります。最後に、GCMを送信した後、高いサーバCPUを経験しているこの関連のSO questionをチェックしたいかもしれません。

希望すると便利です。

+0

私のアプリケーションサーバーでは、すでにメッセージをグループ化しています。複数のregistrationIdsに1つのリクエストを送信しています。テストスクリプトであっても、複数のregistrationIdがあり、私の現実に近いシナリオを得ることができます。 このテストの提案は、私が直面している問題を理解するのに役立つサンプルを入手することです。私のアプリケーションサーバーでは、1000個のリクエストを順番に送信するわけではありません。私はGCMに大量のリクエストを送信していますが、それらは順次ではなく、時には私が報告したように応答時間が長くなることもあります。とにかくお返事ありがとうございます。 –

+0

私はテストスクリプトを変更して10回のリクエストを送信し、10回のリクエストの実行ごとに2秒間スリープします。わずか5回の実行で、私は3.074と1.347で応答を得た。 –

関連する問題