0

2つのWebサイトからの2つの別個の異なるAPIを使用しています(サイト1=>私のアプリ=>サイト2)。一方のサイトのAPIからデータを取得(取得)し、もう一方のサイトにデータを送信(投稿)します。AKA「クラックを埋める」(常に送信サイトのデータをソースとミラーリングしたままにする)を同期するレイヤーと、非複製のレイヤー(SITE1のデータセットにSITE2に重複するエントリがないことを確認する)があります。 )。

ユーザーが単純なフォームのPOSTボタンを使用して「同期」を誘導したとき。潜在的に、SITE1からの何千ものエントリをSITE2に取り込む必要があります。これを行う簡単な低レベルの方法は、SITE 1からデータの配列を取得することであり、そのループで、データを送信してSITE2に送信します。大規模な作業を行う場合、この種のループはほとんどの場合失敗するか、ページが終了すると数分間ハングして終了します。

これは、それを行う「ローレベル/ローテク」の方法の例です。この例の各部分は非常に時間がかかります。ユーザーが停止できる1ページ/1スクリプトで発生するすべての操作。ページは白く、空白で、あまりユーザーフレンドリーではありません。

// Get all of the data from site one
$siteOneDataNuggets = get_siteOne_data();

//Loop through all of site one's data
foreach($siteOneDataNuggets as $siteOneDataNugget){

  //Post it to site two
  post_siteTwo_data($siteOneDataNugget);

}

このようなプロセスに時間がかかる場合は、ある種のロード画面/バーを表示したいと思います。このようなものもどのように実装されますか。

私は、上記の状況に対処するためのコーディング哲学または標準的な方法を探しています。アイデアと理論は私が探しているものであり、必ずしもコード例ではありません。

私自身の先入観のある選択肢。

$siteOneDataNuggetこれを行う別の方法は、ローカライズされた「API」として機能するページを作成することです。各ページには、1つのページではなく1000ページにロジックを分散する独自のインスタンスがあります。ほとんどの場合、ローディングバー/プレゼンテーション層にajaxフィードを使用して行われます。

経過報告

私は代替案を深く掘り下げていません。PHP CURLから始めて、ロードに数時間かかることがわかったとき(4分のタイムアウトがトリガーされました) 、非同期のcurl呼び出しを使用するJaisenMathaiによるこのブログ投稿で説明されているEpiCurlに遭遇しました。これには、私がまだ克服していない独自の制限があります。

4

1 に答える 1

0

私はこれで自分の時間よりずっと進んでいました。私がやっていたことは本当に馬鹿げていて、サーバーに何千ものAJAXリクエストを送信して何らかのアクションを実行していました。私がすべきだったのは、WebSockets / socket.ioを使用して、クライアントとサーバー間で何らかの双方向通信を行い、一括操作とプログレスバーを処理できるようにすることでした。

この質問の時点では、どちらもまだ初期段階でした。

于 2016-04-07T23:52:20.027 に答える