ホームページ バックエンド開発 PHPチュートリアル PHP 非同期: fsockopencurl を使用して、PHP で非同期処理のような関数を実装します。

PHP 非同期: fsockopencurl を使用して、PHP で非同期処理のような関数を実装します。

Jun 23, 2016 pm 01:30 PM

この記事は、学習プロセスにおける私の経験のほんの一部です。どなたでもコメントしていただけます。

主流の観点から見ると、PHP はプロセス指向の言語であり、プログラムの実行が最初から最後までロジックに従って実行されることが最大の欠点です。これが、主流のプログラミング言語の中で PHP が高水準言語として開発されることを制限する理由の 1 つです。

PHP では、特定の操作を実行するときに、実際に別の操作を実行したい場合があります。ユーザーがチケットを取得しているときに、クエリのためにデータベースに接続するためにユーザーがキューに並ぶことを望まない場合があります。を挿入し、完了後にユーザー結果を返します。実際、ユーザーが送信した後は、チケットを正常に取得したことをユーザーに直接伝えることができ、処理をバックグラウンドに任せることができます。もちろん、現在ではメッセージ リストを使用して、ユーザーが送信した各リクエストをメッセージ キューに保存し、ユーザーが喜んでページを閉じた後も、実際には背景がそのままになっています。メッセージを 1 つずつ受信して、キューからリクエストを削除して操作します。この記事では、異種混合アプローチを使用して、ユーザーを待たせることなくバックグラウンドで操作を実行できるようにしています。

まず、リクエスト エントリを作成する必要があります:

<?php提交的数据提交给后台告诉用户已经搞定了
ログイン後にコピー

次に、バックグラウンド ハンドラーが必要です。ユーザーがオンラインであるかどうかは、その操作に影響しません:

<?phpignore_user_abort(true);set_time_limit(0);过来的数据数据处理
ログイン後にコピー

ここでの質問は、コードの最初の部分です。 、「バックエンドに送信」するにはどうすればよいですか?この関数は、ノンブロッキング リクエストを通じて実装されます。つまり、アクセス可能な URL を作成し、この URL で 2 番目のプログラムを実行し、リクエストを通じて URL を要求することで、2 番目のプログラムの自動実行をアクティブにします。次に、コードを直接見てみましょう:

// 远程请求(不获取内容)函数function _sock($url) {  $host = parse_url($url,PHP_URL_HOST);  $port = parse_url($url,PHP_URL_PORT);  $port = $port ? $port : 80;  $scheme = parse_url($url,PHP_URL_SCHEME);  $path = parse_url($url,PHP_URL_PATH);  $query = parse_url($url,PHP_URL_QUERY);  if($query) $path .= '?'.$query;  if($scheme == 'https') {    $host = 'ssl://'.$host;  }  $fp = fsockopen($host,$port,$error_code,$error_msg,1);  if(!$fp) {    return array('error_code' => $error_code,'error_msg' => $error_msg);  }  else {    stream_set_blocking($fp,true);//开启了手册上说的非阻塞模式    stream_set_timeout($fp,1);//设置超时    $header = "GET $path HTTP/1.1\r\n";    $header.="Host: $host\r\n";    $header.="Connection: close\r\n\r\n";//长连接关闭    fwrite($fp, $header);    usleep(1000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功    fclose($fp);    return array('error_code' => 0);  }}
ログイン後にコピー

この関数では、fsockopen を使用して URL にアクセスしますが、アクセス中に URL に表示されるコンテンツを取得する必要はありません。 、ただし、アクセス要求を発行するだけです。到着したらすぐにこのアクセスを閉じます。この利点は、訪問した URL から信頼できる情報が返されるまで待つ必要がないため、時間が節約されることです。このコードの実行時間は 0.1 ~ 0.2 秒であり、通常の訪問者にはほとんど知覚されません。したがって、使用するときは、この関数と対応する URL を呼び出すだけで済みます。ただし、ここではデータ送信部分は提供されていません。実際には、$header に投稿コンテンツを追加するだけです。

fsockopen に加えて、curl は実際にこの効果を実現できるため、fsockopen をサポートしていないホストもあるので、curl を使用してそれを実現できます。

function _curl($url) {  $ch = curl_init();  curl_setopt($ch,CURLOPT_URL,$url);  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  curl_setopt($ch,CURLOPT_TIMEOUT,1);  $result = curl_exec($ch);  curl_close($ch);  return $result;}
ログイン後にコピー

このコードの重要な点は、タイムアウトを 1 秒だけ指定することです。つまり、curl がリクエストを行うと、返されたコンテンツが受信されたかどうかに関係なく、アクセスは 1 秒後に閉じられます。 , したがって、この関数の実行データは 1.0 ~ 1.1 秒の間です。しかし、ユーザーにとって、データ処理が必要なアプリケーションの場合、1 秒の待ち時間はほとんど無視されます。よりシンプルでわかりやすいコードを使用したい場合は、curl を選択して実装することができます。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles