私はライブスコアWebサイトを開発しています。目標は5秒ごとにリフレッシュしてキャッシュします5秒ごとにAPIの変更に基づいてウェブサイトの一部を更新します。
APIリクエストはPHPで行われ、データのソートも行われます。しかし、私はAPIリクエストの更新部分を実装することに苦労してきました。バックグラウンドでAPIリクエストを更新し、5秒ごとにウェブサイトを更新するためのJavaScriptが必要なので、5秒ごとに新しいデータを取得できます。
私はいくつかの助けを得たいです。私はCRONでやってみたいですが、ホストは5秒ごとにCRONを実行するようにはしていません。私の問題に対する解決策はありますか?私は非同期に5秒ごとにPHPでapi呼び出しを実行します
答えて
最も簡単な方法は、PHPスクリプトを5秒ごとに新たに実行するのではなく、無限ループで実行することです。以下のような
何か:
#!/usr/bin/env php
<?php
while (true) {
CacheStuff();
sleep(5);
}
その後複数回実行し、それを防ぐために群れのようなものを使用してのcronでそれをトリガーします。
* * * * * flock -n /var/lock/cache_script.lock /path/to/myscript.php
これはcronなしで実行できます。このようなものが動作します:
- ユーザーのブラウザからAPIにリクエストが送信されます。
- APIはキャッシュに値が存在するかどうかを確認します(Memcached?)。その後、
- 何のキャッシュエントリが存在しない場合は、お使いのAPIは、発信要求を行う、並べ替え/応答を処理し、cronのソリューションと比較して5+秒
優位の有効期限でそれをキャッシュ - なしがある場合あなたのウェブサイト上のアクティブなユーザーは、不必要な発信要求はありません。
ブラウザ側でウェブソケットを使用することも考えられます。
私は実際にいくつかの会社のライフコアベースのAPIにapiリクエストを行うことを意味していました。そのデータをキャッシュし、誰かがWebサイトをロードすると、キャッシュに5秒ごとにリクエストを行い、キャッシュが5秒を超えると新しいapiリクエストが実行され、そのデータが再びキャッシュされます。そして、これは基本的に無限にループしています。 –
@SandiKarajicはい、私は正しく理解しました。私の答えはまだ正しいです。 'cron'の実装とは異なり、私のやり方はオンデマンドです。ユーザーも負荷もありません。ユーザーには外部のAPIリクエストがあります –
私の仮定: はあなたがcronを、memcachedの、Redisのなど(基本的なホスティング問題)あなたはJSONオブジェクトとしてファイルにデータを保存することができます
サンプルのためのあらゆる機会を持っていけません。例えば
は、あなたのファイル名は、「5分-data.json」
はので、あなたのコードが可能です。
$timeout_sec = 5;
$file_path = '5min-data.json';
if (file_exists($file_path) && ((filemtime($file_path) - time()) < ($timeout_sec * 60))) {
$data = json_decode(file_get_contents($file_path), true);
}
else {
//produce your data here as array, it is only sample
$data = [
'brand' => 'Mazda',
'model' => 'Mzd3',
'year' => 2016,
'weight' => 1234.5,
'airbags' => [
'front-left',
'front-right',
'back-left'
]
];
file_put_contents ($file_path, json_encode($data));
}
//$data is fresh
- 1. 5秒ごとにAndroidウェブサービスを非同期に呼び出します。
- 2. API呼び出しを実行するごとに10秒
- 3. API呼び出しを非同期で行います
- 4. 同期呼び出し内での非同期タスクの実行
- 5. 非同期API呼び出しを再帰的に呼び出します。
- 6. 非同期に非同期デリゲートを呼び出しますか?
- 7. X秒ごとに非同期のjavascriptコードを実行
- 8. 5秒ごとに自動的にタスクを呼び出す
- 9. 同じ実行で同期API呼び出し(REST/Spring)と非同期メッセージ(Kafka)を処理する
- 10. 非同期ライブラリから非同期呼び出しを行う?
- 11. バックグラウンドで同期してAPI呼び出しを行うには?
- 12. 非同期呼び出し内の非同期呼び出しが実行されない
- 13. 非同期呼び出し
- 14. 5秒ごとに関数を呼び出す
- 15. 5秒ごとにラムダ関数を呼び出す
- 16. AppleScriptは5秒ごとにスクリプトを実行します
- 17. 非同期に非同期にPython呼び出しリモートオブジェクトメソッド
- 18. 非同期メソッド(Web呼び出しを行う)を非同期にラップする
- 19. 非同期呼び出し後にモーダルを実行しました
- 20. 非同期タスクとは、C#、私は非同期Webサービスの呼び出しに取り組んでいます
- 21. Ember:5秒ごとにapiをポーリングしますが、前の呼び出しの応答を取得した後
- 22. Cocos2dxスケジュールセレクタなしで5秒ごとに関数を呼び出す方法?
- 23. 各ファイル行の非同期HTTP API呼び出し - Python
- 24. 角度5で同期呼び出しを行う方法は?
- 25. UIViewControllerと非同期の呼び出し
- 26. Javascriptオブジェクトと非同期呼び出し
- 27. gen_server:X秒ごとに呼び出す
- 28. Pythonでの同期呼び出しへの非同期呼び出し
- 29. WinFormsはUIをブロックせずに非同期メソッドを呼び出す同期メソッドを実行します
- 30. 5秒間実行した後に非同期スレッドを停止する方法
ようこそスタックオーバーフロー。あなたはあなたの質問を改善することができます。 [質問する方法](http://stackoverflow.com/help/how-to-ask)の「質問をスマートにする方法」のリンクを参照してください。 – zhon