ホームページ >バックエンド開発 >PHPチュートリアル >PHP アンチシェイク テクノロジ: 同時実行性の高いシナリオで繰り返しデータが送信される問題を解決する

PHP アンチシェイク テクノロジ: 同時実行性の高いシナリオで繰り返しデータが送信される問題を解決する

王林
王林オリジナル
2023-10-12 15:23:011733ブラウズ

PHP 防抖技术:解决高并发场景下的数据重复提交问题

PHP アンチシェイク テクノロジ: 同時実行性の高いシナリオでデータが繰り返し送信される問題を解決する

はじめに:
同時性の高いシナリオでは、ユーザーがボタンを頻繁にクリックする可能性があります。または、フォームを送信すると、サーバーが同一のリクエストを複数受信することになり、データが繰り返し送信される可能性があります。この問題を解決するために、「手ぶれ補正」と呼ばれる技術を採用することができます。この記事では、PHP の手ぶれ補正テクノロジーと具体的なコード例を紹介し、同時実行性の高いシナリオで繰り返しデータが送信される問題を開発者が解決する方法をより深く理解できるようにすることを目的としています。

手ぶれ補正技術とは何ですか?
手ぶれ補正技術とは、ユーザーがイベントをトリガーした後、一定時間待機することを意味し、この期間内に再度イベントがトリガーされると、時間がリセットされます。ユーザーが一定期間トリガーを停止した場合にのみ、対応するアクションが実際に実行されます。データ送信シナリオでは、手ぶれ補正テクノロジーにより、ユーザーの頻繁なクリックによるデータの繰り返し送信を効果的に回避できます。

PHP での手ぶれ補正テクノロジーの実装:
PHP で手ぶれ補正テクノロジーを実装するには、Session、Redis、およびその他のキャッシュを使用して、単純な手ぶれ補正メカニズムを実装できます。以下に具体的なコード例を示します。

<?php
// 防抖时间间隔,单位为秒
$debounceInterval = 5;
// 缓存键名
$cacheKey = 'submit_debounce_key';

// 检查是否存在防抖标记
if (!isset($_SESSION[$cacheKey])) {
    // 如果不存在则设置防抖标记,并设置过期时间
    $_SESSION[$cacheKey] = 1;
    // 设置过期时间为防抖时间间隔
    $_SESSION[$cacheKey . '_expire'] = time() + $debounceInterval;

    // 执行相应的操作
    // TODO: 处理表单提交逻辑

    // 清除防抖标记
    unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
} else {
    // 存在防抖标记,判断是否已过期
    if ($_SESSION[$cacheKey . '_expire'] <= time()) {
        // 清除过期的防抖标记,重新设置
        unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
        $_SESSION[$cacheKey] = 1;
        $_SESSION[$cacheKey . '_expire'] = time() + $debounceInterval;

        // 执行相应的操作
        // TODO: 处理表单提交逻辑

        // 清除防抖标记
        unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
    } else {
        // 如果未过期,则说明此次请求属于重复提交,可以不做任何处理,或者返回相应的提示信息
        echo '请勿重复提交';
        exit;
    }
}
?>

上記のコード例では、まずデバウンス時間間隔 $debounceInterval を定義し、キャッシュ キー名 $cacheKey を設定します。初めてフォームを送信するとセッションに手ぶれマークが設定され、有効期限が手ぶれ間隔として設定されます。再度フォームが送信されると、手ぶれ補正マークの有無と有効期限が切れているかどうかを確認し、判定結果に基づいて対応する処理を行います。デバウンス フラグの有効期限が切れた場合、デバウンス フラグはリセットされ、フォーム送信ロジックが実行されます。手ぶれ補正マークの有効期限が切れていない場合は、このリクエストが繰り返し送信されたことを意味し、処理を実行することも、対応するプロンプト情報を返すこともできません。

概要:
同時実行性の高いシナリオでは、手ぶれ補正テクノロジーにより、繰り返しデータが送信される問題を効果的に解決し、ユーザー エクスペリエンスとシステム パフォーマンスを向上させることができます。 PHP のキャッシュ メカニズムを使用すると、同時リクエスト数が多い場合に対処するための単純な手ぶれ防止メカニズムを簡単に実装できます。この記事のコード例が、開発者による手ぶれ補正テクノロジの理解と適用、システムの安定性と信頼性の向上に役立つことを願っています。

以上がPHP アンチシェイク テクノロジ: 同時実行性の高いシナリオで繰り返しデータが送信される問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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