2012-02-17 2 views
0

トラフィックが多い瞬間にFacebookのタブでアプリが動作しています。人々は数秒ごとにサインアップし、ほとんどが成功しています。しかし、私は次の問題に遭遇しています:

- アクセストークンが全く受信されません(空の応答、エラーなし)
- または受信された場合、/ meへのAPIコールは失敗します(空の応答、エラーなし)

EDIT:明らかにAPI呼び出しを制限することは問題ではありません。なぜなら、600/600コール/秒はユーザーあたりの意味合いがあるからです。:)

誰もこのような問題を経験していますか?私は1分に約20-30回の成功したアプリ申し込みと約2〜3回失敗したものを手に入れています。注:これらのアプリへのアクセスを拒否するユーザーではありません - それらは別の場所で処理されます...

編集:私は「!のストリームをオープンに失敗しました:HTTPリクエストが失敗したHTTP/1.0 400不正な要求」取得しています

トラフィック量の多いサイトの認証:空のアクセストークン、空/私

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".$oauth_clientid."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$oauth_secret."&code=".$code; 
$access_token = file_get_contents($token_url); 
+0

Facebookのタブはどういう意味ですか?ページタブを参照していますか?つまり、アプリケーションはページ上で実行されていますか? また、600トークン/秒のトークトークでは、アクセストークンごとにすべての要求を処理するということは、1人のユーザーに対して1秒あたりに多くの要求を処理しているのでしょうか? –

+0

申し訳ありません。ページタブ...しかし、それは実際にはかなり無関係です。 :) – Aron

+0

リクエストはアプリ全体の1秒あたり1秒かもしれません。だから私はそれが問題を引き起こしている限界ではないと思う。また、限界と私も、空の応答ではなく、エラーメッセージを取得する必要があります! – Aron

答えて

1

更新:カールを使用するようにコードを変更した後、改善がありましたが、問題は解決しませんでした。問題のアプリケーションがピーク時の使用を過ぎてしまったので、明らかにエラーの数が大幅に減少しました。それはまだ時々起こる。エラーは、(ほとんどの場合)、次のとおりです。

  • カール・エラー(6):ホストを解決できませんでした 'graph.facebook.com'
  • カール・エラー(28):SSL接続タイムアウト

...と他の同様のエラー。

私の経験では、1〜2週間のデータで、トラフィックが多いときはリクエストの約1%、低ければ少ないほど効果があるようですが、これは非常に非科学的です。 :)

-

だから解決策はありますか?まあ、実際にはありません。リクエストの一部が失敗し、私の(あなたの)アプリケーションがこれらのエラーを可能な限りエレガントに処理する必要があるようです。

私の唯一の質問は、他の誰かがトラフィックの多いアプリでこのような経験をしていますか? (この場合、1日のページビュー数は100,000〜500,000、アクティブユーザー数は50,000〜100,000)

+0

あなたはこれでどこにいらっしゃいましたか?残念ながら、 – buggedcom

+0

はありません。唯一の選択肢は、エラーを処理し、フレンドリーなメッセージを表示し、ユーザーに再試行させることです... – Aron

0

回答がそこにあるはずのaccess_tokenを取得したときに、curlエラーと戻り値をログに記録してください。

+0

私は今までfile_get_contentsを使用していました。 1時間ほど前にコードのカールバージョンが公開されましたが、すでに「Curlエラー(6):ホスト 'graph.facebook.com'を解決できませんでした。場合によってはこれは普通だと思いますので、これがどれほど頻繁に起こるかを確認するために別の日を待たなければなりません。 – Aron

0

php_openssl拡張子がないか無効であるためだと思います。有効にするにはthis questionを参照してください。または、cURLを使用することもできます。 PHP SDKの公式からfb_ca_chain_bundle.crtを取る(またはfalseCURLOPT_SSL_VERIFYPEERを設定):

$base_url = 'https://graph.facebook.com/oauth/access_token'; 
$params = array(); 

$params['client_id']  = $client_id; 
$params['client_secret'] = $client_secret; 
$params['redirect_uri'] = $redirect_uri; 
$params['code']   = $code; 

$options = array(
    CURLOPT_SSL_VERIFYHOST => 2, 
    CURLOPT_SSL_VERIFYPEER => true, 
    CURLOPT_CAINFO   => __DIR__ .'/fb_ca_chain_bundle.crt', 
    CURLOPT_RETURNTRANSFER => true, 
    CURLINFO_HEADER_OUT => false, 
    CURLOPT_HEADER   => false, 
    CURLOPT_URL   => $base_url . '?' . http_build_query($params), 
); 

// Init cURL and send the request 
$ch = curl_init(); 
curl_setopt_array($ch, $params); 

$result = curl_exec($ch); 
$infos = curl_getinfo($ch); 

curl_close($ch); 
var_dump($result, $infos); 

EDIT:私はこれはクイックコピーで警告を表示し、あなたが$optionsをダブルチェックですので、私のコードから貼り付けます。

+0

NOリクエストは機能するのでしょうか?私の要求のほとんど(95%)がうまくいっていることは非常に奇妙です。そして、それは最終的には数回再試行してからユーザー設定のもの(HTTPSなど)でさえ...私はこれを試してみましょう... – Aron

+0

またこれをチェックアウトhttp://stackoverflow.com/questions/ 6903240/getting-404-error-from-facebook-graph-api –

+0

@Aron申し訳ありませんが、あなたの質問をよく読まなかった。はい、それはあなたがランダム400エラーを取得しているのは奇妙です。 paramsだけが変わる可能性があるので、さらに調べるために、リクエストごとにパラメータを記録します。 – gremo

関連する問題