この記事の内容は、php + swooleを使用して非同期タスクキューを実装する方法を共有することです。必要な友達はそれを参照してください
100通のメールを送信したい場合。 、for ループが 100 回発生したため、ユーザーはすぐに反乱を起こし、Web サイトが破壊されました。
しかし、現実的には、おそらく 10,000 件を超えるメールがあるでしょう。この遅延の問題にはどう対処すればよいでしょうか?
その答えは、非同期を使用することです。 「電子メール送信」操作をカプセル化し、バックグラウンドで非同期に 10,000 回実行します。この場合、ユーザーが Web ページを送信した後の待機時間は、「電子メール タスク リクエストをキューにプッシュする」時間だけです。また、バックグラウンド サービスはユーザーの目に見えない場所で実行されます。
「非同期キュー」の実装に関しては、MySQL テーブルや Redis を使用して送信するメールを保存し、送信対象リストを 1 分ごとに定期的に読み取って処理する人もいます。これはスケジュールされた非同期タスクキューです。ただし、現在送信されているタスクの実行には 1 分かかりますが、テキスト メッセージの送信など、リアルタイム要件が高い一部のアプリケーション シナリオではまだ高速ではありません。ユーザーは結果が返されるまで待つ必要がありません。
以下では、phpを使用してswooleを拡張し、テキストメッセージを送信するためのリアルタイム非同期タスクキューを実装する解決策について説明します。
サーバー
ステップ 1: TCP サーバーを作成します
ステップ 2: サーバーの関連する属性を設定します
ステップ 3: サーバーの関連するコールバック関数を設定して、 task
具体的なコードは次のとおりです: tcp_server.php
<?php class Server{ private $serv; public function __construct(){ $this->serv = new swoole_server("0.0.0.0",9501); $this->serv->set( array( 'worker_num' => 1, //一般设置为服务器CPU数的1-4倍 'daemonize' => 1, //以守护进程执行 'max_request' => 10000, 'dispatch_mode' => 2, 'task_worker_num' => 8, //task进程的数量 "task_ipc_mode " => 3, //使用消息队列通信,并设置为争抢模式 "log_file" => "log/taskqueueu.log", ) ); $this->serv->on('Receive',array($this,'onReceive')); $this->serv->on('Task',array($this,'onTask')); $this->serv->on('Finish',array($this,'onFinish')); $this->serv->start(); } public function onReceive(swoole_server $serv, $fd, $from_id, $data){ $serv->task($data); } public function onTask($serv, $task_id, $from_id, $data){ $data = json_decode($data,true); if(!empty($data)){ return $this->sendsms($data['mobile'],$data['message']); } } public function onFinish($serv, $task_id, $data){ echo "Task {$task_id} finish\n"; } public function sendsms($mobile,$text) { $timestamp = date("Y-m-d H-i-s"); $pid = "888888888"; $send_sign = md5($pid.$timestamp."abcdefghijklmnopqrstuvwxyz"); $post_data = array(); $post_data['partner_id'] = $pid; $post_data['timestamp'] =$timestamp; $post_data['mobile'] = $mobile; $post_data['message'] = $text; $post_data['sign'] = $send_sign; $url='http://182.92.149.100/sendsms'; $o=""; foreach ($post_data as $k=>$v) { $o.= "$k=".urlencode($v)."&"; } $post_data=substr($o,0,-1); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL,$url); //为了支持cookie //curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); if(strpos($result,"success")!==false) { $outstr=1; } else { $outstr=502; } return $outstr; } } $server = new Server(); ?>
Client
バックエンドサービスを開始した後、クライアントはまず TCP クライアントサーバーを作成し、次に TCP バックエンドサーバーに接続してデータを送信します具体的なコードは次のとおりです: client.php
<?php class Client{ public $client; public function __construct(){ $this->client= new swoole_client(SWOOLE_SOCK_TCP);//默认同步tcp客户端,添加参数SWOOLE_SOCK_ASYNC为异步 } public function connect(){ if(!$this->client->connect('127.0.0.1',9501,1)){ throw new Exception(sprintf('Swoole Error: %s', $this->client->errCode)); } } public function send($data){ if($this->client->isConnected()){ $data = json_encode($data); //print $data; if($this->client->send($data)){ return 1; }else{ throw new Exception(sprintf('Swoole Error: %s', $this->client->errCode)); } }else{ throw new Exception('Swoole Server does not connected.'); } } public function close(){ $this->client->close(); } } $client= new Client(); $client->connect(); $data=array( 'mobile'=>'18511487955', 'message'=>'you mobile 18511487955' ); if($client->send($data)){ echo 'succ'; }else{ echo 'fail'; } ?>
関連する推奨事項:
PHP は swoole を使用してリアルタイム非同期を実装します。タスクキュー
Spring Boot - Redis のキースペース通知を使用してスケジュールされたタスクキューを実装します
以上がphp + swooleを使用して非同期タスクキューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Dreamweaver Mac版
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









