ホームページ  >  記事  >  バックエンド開発  >  PHPでインターフェースをロックして、インターフェースが同時に同じ人からのリクエストを1つだけ処理できるようにするにはどうすればよいですか?

PHPでインターフェースをロックして、インターフェースが同時に同じ人からのリクエストを1つだけ処理できるようにするにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-09-05 08:59:552290ブラウズ

現在、私が使用しているのは、セッションに入るたびに、値が存在するかどうかを確認することです。存在しない場合、このリクエストは実行されません。 、値を設定し、以降の操作を実行します。

リーリー

これは可能だと思いました。セッションは Redis に非常に迅速に保存されます。つい先ほど眠れずにいじってみたところ、ユーザーが同じリクエストに対して複数のリクエストを実行できることがわかりました。同時にインターフェースも。

1人から同時に複数のリクエストが必要な場合は、最初のリクエストのみが処理されます。同一人物かどうかはセッションに基づいて判断してください。

これをどうやって確認しますか?

返信内容:

現在、私が使用しているのは、セッションに入るたびに、値が存在するかどうかを確認することです。存在しない場合、このリクエストは実行されません。 、値を設定し、以降の操作を実行します。

リーリー

これは可能だと思いました。セッションは Redis に非常に迅速に保存されます。つい先ほど眠れずにいじってみたところ、ユーザーが同じリクエストに対して複数のリクエストを実行できることがわかりました。同時にインターフェースも。

1人から同時に複数のリクエストが必要な場合は、最初のリクエストのみが処理されます。同一人物かどうかはセッションに基づいて判断してください。

これをどうやって確認しますか?

データベースが関係する場合は、ロックを使用するか、すべてのリクエストをキューに入れて 1 つずつ処理します

考えてみたら、入場時間と退場時間の2つを書こうかなと思いました。
アクセスは開始時刻の書き込みを開始し、出口は終了時刻を書き込みます。
最初の訪問は空である必要があると仮定します。 start=02:26:30 end=02:26:50
その後、訪問を再開始するときに次のように判断します。
<1>If start>end 、があることを示しますアクセス中に別の状況が発生した場合、つまり、アクセスが中断され、終了時刻を書き込む時間がないため、ここで start>end&&start-end>100 などの初期化判断を行って、end を現在の時刻に直接変更する必要があります。の場合、無料であり、アクセスが実行されます
<2>start注: タイムスタンプは、マイクロ秒単位で可能な限り正確である必要があります。計算を容易にします。

データベースを使用して処理を実行しないように設定できます。

标识, 用户进入该请求时先去检查数据库, 存在标识キャッシュを使用して処理中のユーザーの ID を保存し、フィルターを通してその ID を操作すると、ユーザーのリクエストが届きます。フィルターが ID がキャッシュにないと判断した場合は追加され、ID は処理後に削除されます。

実際のニーズは何かということですが、API の観点から説明しないほうが簡単かもしれません。

あなたの質問から判断すると、あなたは愚かな解決策を思いついたはずです。本来のニーズを明記することをお勧めします。

1. Mysql を使用する場合は、リクエストが完了した後、他のリクエストを実行する前にロックを解除する必要があります。

2. リクエストが到着したときに、カウンターを追加できます。リクエストが終了したら、この方法をお勧めします

3. さらに、同じユーザーによる各リクエストもブロックされます。

ファイルを入力した後、操作が完了した後にファイルロックを使用してファイルのロックを解除します。次のユーザーは引き続きアクセスしてロックを続けることができます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。