BeansTalkdのジョブにファイルを分割して投入&復元する

PHPでファイルの分割と結合方法を調べてみました。
PHP 指定バイト数でファイルを分割&結合する

下調べはすんだので、Beanstalkdのジョブにファイルを分割して投入&復元してみます。



データの登録



データの登録はこんな感じになりました。


  1. <?php
  2. require_once('Client.php');
  3. use Beanstalk\Client;
  4. // beanstalkdに接続
  5. $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
  6. $beanstalk->connect();
  7. // --- データの登録
  8. // チューブに接続
  9. $beanstalk->useTube('test');
  10. // ファイルの内容を取得
  11. $image = file_get_contents('miku.png');
  12. // バイト数を取得
  13. $bytes = strlen($image);
  14. // 分割するバイト数
  15. $cut_bytes = 60 * 1024;
  16. $split_count = 1;
  17. $start = 0;
  18. while(true) {
  19.     
  20.     // ファイルを分割
  21.     $cut_image = substr($image, $start, $cut_bytes);
  22.     if (empty($cut_image)) {
  23.         break;
  24.     }
  25.     
  26.     // データを登録
  27.     $beanstalk->put(
  28.         1, // Jobの優先度
  29.         0, // 即時実行するか
  30.         1, // Jobの実行時間(秒)
  31.         $cut_image // Jobのデータ
  32.     );
  33.     
  34.     $split_count++;
  35.     $start += $cut_bytes;
  36.     
  37. }
  38. // 切断
  39. $beanstalk->disconnect();





ドキュメントによると、
https://github.com/kr/beanstalkd/blob/master/doc/protocol.en-US.md

bodyに登録できるサイズはデフォルトで2 ** 16 (2の16乗。65536) byteですね。
※設定で変更可能

60Kbyteで分割しているので、ちゃんと登録出来ました。




データの復元



データの復元はこんな感じになります。


  1. <?php
  2. require_once('Client.php');
  3. use Beanstalk\Client;
  4. // beanstalkdに接続
  5. $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
  6. $beanstalk->connect();
  7. // --- データの取り出し
  8. // testチューブを監視
  9. $beanstalk->watch('test');
  10. while(true){
  11.     // ジョブの内容を取得&ロック
  12.     $job = $beanstalk->reserve();
  13.     // 取得できた内容を保存
  14.     file_put_contents("result.png", $job['body'], FILE_APPEND);
  15.     // ジョブを処理したので削除
  16.     $beanstalk->delete($job['id']);
  17. }
  18. // 切断
  19. $beanstalk->disconnect();




とりあえずのお試しなので適当です。
これでちゃんと画像の分割登録&復元が行えることを確認しました。


関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ