2017-05-02 5 views
1

私は大量のSMSとして送信されるテキストメッセージを送信するために使用しているWebサービスを持っています。私は送信のためにテキストメッセージを送信する必要があるというURLが与えられています。複数の番号をWebサービスに送信する

私は、メッセージがWebサービスに一つずつ提出されている30,000レコードを送信することは時間を取っている私は、このように

$row = 1; 
if (($handle = fopen("27k.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . '<br/>'; 
     } 
    } 
    fclose($handle); 
} 

を読んでいますcsvファイル内の番号を持っています。

一度に1つのテキストを送信するのではなく、Webサービスに対して30,000件の同時リクエストを作成できるようにするためのプログラミング構文がありますか。

+0

ここにここでリクエストを送信しますか?非同期呼び出しは一般的なので、より具体的に - これにはPHPを使いたいですか? [ここ](http://stackoverflow.com/questions/124462/asynchronous-php-calls#2924987)は非同期にPHPを投稿する例です。 – kabanus

+0

@kabanusそのコメントのコメントとして、それは非同期リクエストを実行する方法ではありません – dm03514

+0

@ dm03514修正してください!申し訳ありません - 私は実際にそれを読んでいませんでした。ありがとう。 – kabanus

答えて

0

はい!

上記のそれぞれが独自のトレードオフがあります:あなたを助けることができる多くの並行性の構築物があります。スレッドメモリでは、同期を考慮する必要があります(多くの場合、キューを持つスレッド間でデータを渡すことによって単純化されます)。

イベントループはIO用に最適化されています(ユースケースには最適なはずです)。未来を表し、非同期操作、降伏、およびイベントループがいつどのような状態になるかは、

プロセス間ジョブキューには、キューとワーカープールを管理するための操作オーバーヘッドがあります。

上記のいずれの解決策もX個の同時リクエストを許可する必要がありますが、リソースプールをバインドする(つまり、同時実行性を制限する)ことは一般的には良い方法です。 30,000件の同時リクエストを開始した場合(あなたのマシンでも多くのことを起動できますか?)、簡単にサーバーを圧倒することができます。起動がエンドユーザーまたはコントロールされていない操作によって行われる場合、いつでもX * 30000要求を開始することができます。

また、単一のリクエストが失敗した場合はどうなりますか?あなたは再試行しなければなりませんか?料金が制限されるのはどうですか?

+0

スレッドとジョブキューを考慮しました。スレッドの場合、私はcsvファイルから読み込んでいるので、同じファイルを読み込んでいる複数のスレッドが重複したテキストを生成する可能性があります。複数の作業者が存在するため、ジョブキューも同様です。 –

+0

@GeoffreyIsleこれに対処する1つの方法は、ファイルを読み込んでキュー内の各URL(インプロセスキューまたはプロセス間キュー)を送信し、ワーカー(スレッド、プロセス)のプールを消耗させることですキューは同時に動作します。ファイルを読み取りキューに送信するタスクはプロデューサと呼ばれ、ワーカー(コンシューマ)に要求(ラウンドロビン/ランダム、ほぼすべてのキューが保証されます)をファンアウトします。重複の原因にはなりません – dm03514

+0

その配置は良いと思います。私はそれらの行に沿って何かを考えていたが、キューのアイデアは熱意で私を埋めるものではない。しかし、私はそれを豆腐で試してみます。私はhttp://elixir-lang.org/ elixirを見ていて、多くのリソースを使わずに30,000件のリクエストを処理できるかどうか疑問に思っています。 –

関連する問題