0

そのため、xml 投稿で攻撃される PHP スクリプトを備えたサーバーがあります。各xmlには1ブロックのデータまたは複数のデータブロックが含まれる可能性があり、私に投稿しているサーバーには約10秒の可変タイムアウトがあるため、スクリプトは約10秒でサーバーに情報を取得したことを伝えます(http:200/pageロードが完了していない場合) またはシステムをループにダイブする投稿を再試行します。このxmlが原因で送信される電子メールや通話などはできるだけ早く送信する必要があるため、私のターンアラウンドタイムはほぼ瞬時である必要があります.

私は次のことを考えました: xml を txt ファイルにダンプし、DB にログを記録します。したがって、ファイルは常に 10 秒以内に xml ポスターに応答します。次に、バックグラウンドでファイルを処理するジョブを作成します。誰かが別のスレッドでこれを行うことを提案しました:

#!/bin/bash
while [ "true" ]; do
        /path/to/script.php
        sleep 3
done

私の問題は、40 個の大きなバッチ ジョブと 20 個の小さなバッチ ジョブを取得した場合、1 分間で 30 個の script.php インスタンスを実行できることです。バッチ スクリプトを実行し、完了したら次のバッチ スクリプトを起動し、メモリの問題を発生させないようにしたいと考えています。

したがって、次のようにする方がよいでしょう。

processor.php:

<?php
select next record sort by date desc
grab file, process it
header location to same script
?>

レコードがない場合はスリープ 3 になる可能性があるため、ページは常に実行されています。しかし、これは男性の問題を引き起こしますか、それともヘッダーの場所をそれ自体にすると、メモリがリセットされますか?

助言がありますか?

4

1 に答える 1

1

まともな計画のように聞こえますが、どうですか:

受信機.php

//Receive XML
//Option 1: Store in text file (with timestamp in name)
//  or
//Option 2: Store in text file and then store timestamped reference in database
//Respond to caller

processor.php (10 秒ごと、または cron 経由でアクティブ化)

//Option 1: Check for new XML text files - grab the one with the oldest timestamp
//Option 2: Check database for oldest unprocessed XML - grab the referenced XML file
//Process XML
//Remove XML text file (& any reference in a database)
//Go back to the start of the processor.php script  (while loop or something that checks for unprocessed XML files)
于 2013-04-13T16:29:54.263 に答える