3

自動入札システムのあるオークションサイトを作っています。このシステムにより、人々はそこにいなくても入札を行うことができます。

私の質問は、そのようなシステムをどのように実装するかです。私はphpファイルを作成し、すべての準備が整いました。毎秒更新されるhtmlページを作成しました。それは機能しますが、より良い解決策があるかどうか疑問に思っています。

私が試した 2 番目のオプションは、Web ページを毎秒開く Java アプリケーションを作成することでした。これは、メモリ/CPU を「大量に」消費します。また、どこかにメモリリークがあると思います。

このアプリケーションは、centOS と Plesk を備えた専用の Linux サーバーで実行しているため、多くの代替手段があると確信しています。

例えば:

  1. 毎分 php ファイルを実行する cronjob で、php ファイルがスリープ状態で 1 分間ループします。

  2. 1 秒でループする 1 つの php ファイルがスリープします。

  3. 1 秒後に別の cronjob を実行してスケジュールする 1 つの cronjob。

  4. MySQL スケジューラですが、それを実装する方法がわかりません。また、他の書き込みのためにデータベースをロックしていると聞きました。

  5. cli、perl、python スクリプトについても聞いたことがありますが、どれにも詳しくありません。

これらのオプションの知識がある人は、この件について私に光を当ててください。速度とメモリ使用量の点で最適なソリューションを探しています。

誰かが別の代替ソリューションを持っている場合は、それも聞いてうれしいです.

4

4 に答える 4

2

1 秒ごとは非常に短い間隔であるため、cronjobs はオプションではありません。また、「Web ページ」をそのまま使用しないことを強くお勧めします。これは、パフォーマンスが重要であるため、CLI 用に作成されたスクリプトだけで実行できます。

私がすることは次のとおりです。

  • 誰かが自動入札を有効にしたら、それをデータベースに登録する必要があります。
  • その時点で実行されるエントリについてデータベースをポーリングするデーモンを作成します。

誰でも、各サイクルの後にスクリプトをスリープ状態にすることに細心の注意を払う必要があります。そうしないと、データベースがダウンします。

余談ですが、本当に毎秒実行する必要がありますか? 私の考えでは、自動入札はイベントによってトリガーされます。つまり、残り 10 秒の間に誰かがあなたよりも多く入札したということです。これは、実装がはるかに優れており、リソースをあまり消費しないように思えます (また、そこでデーモンを使用して、自動入札イベントをリッスンすることもできますが、それは別の話です:)

于 2009-11-10T10:41:07.223 に答える
2

特定の時間間隔で問題の PHP スクリプトを実行する cron ジョブを作成します。PHP スクリプトがコンテキストにとらわれない方法で記述されている場合 ( などへのアクセスを必要としない場合) 、コマンド ラインから PHP スクリプトを実行できます。$_GET$_POST

于 2009-11-10T10:06:47.790 に答える
1

なんらかの「イベントベースのパブリッシング」を試すことができます。これは基本的に、データがデータベースに挿入されると、何かが発生するトリガーとなることを意味します。

適切な例として、MySQL がトリガーするか、新しい入札を ON INSERT する単純な php スクリプトでさえ、他の誰かがその入札よりも高い最大入札を行ったかどうかを確認します。
入札した場合は、新しい最高入札額と現在の最高入札者を更新します。

入札者が多数いる場合は、ループを実行して、誰が最も高い入札額を得るかを確認することができます。

要点は、このビジネス上の問題を解決するために実際に走り回り、スケジュールされたジョブを実行するべきではないということです。トリガーまたはイベントを使用することをお勧めします。

于 2009-11-10T17:46:57.073 に答える
0

ジョブを実行するページが既にある場合は、毎分 curl コマンドを呼び出す cron をスケジュールできます (curl http://your/page.php )。唯一の注意点は、ページが外部から呼び出された場合に問題が発生した場合に、ページを保護する必要がある可能性があることです。

于 2009-11-10T10:08:44.870 に答える