検索
ホームページバックエンド開発PHPチュートリアル騙されて泣き叫ぶPHPソフトウェアエンジニア

swooleに騙されたPHPプログラマー

この記事は主にswooleを学ぶまでの過程や埋められた落とし穴、swooleの威力などを記録しています!

まず、PHP で装飾された C プログラムである swoole についての理解を話しましょう。多くの PHPer の友人は、swoole が提供する強力な機能と外部の世界からの賞賛を見て、熱心にインストールし、デモをデバッグし、新しい関数を作成し、興奮してお互いに報告し合いました。数日後、自分の理解に従って swoole を使い続けていると、コードが期待どおりに実行されないことに気づき、「なんてクソなことだ、コードは基本的にデモと同じだ」と罵り始めます。 、なぜ実行されないのでしょうか?なんてナンセンスな作業だ、タスクだ、共有メモリだ、ipcsだ、非同期だ、といろいろな疑問が湧いてきて、早速公式ドキュメントを確認してみたところ、ドキュメントにはこれらについての言及はなく、簡単な使い方の紹介が書かれていた。この時、私はほとんど希望を失いました。

いくつかの問題が発生しました:

1: グローバル変数が phper (グローバル) で一般的に使用されるのはなぜですか? onRequest 関数で使用されます。

swoole はマルチスレッドプログラミングであるため、複数のプロセス間でグローバルを共有することはできません。例

global $i = 0;

function onRequest() {

echo $ i ;

}

上記のプログラムを swoole で書くと、アクセスするたびに増加する数値が出力されるわけではありません。望ましい効果を実現したい場合は、swoole_table の関連関数を使用する必要があります。

2: 非同期とコールバックとは何ですか?

phper にとって、非同期とコールバックの理解はおそらく ajax です。 swoole の非同期とコールバックの説明を見たとき、非常に簡単に思えたので、マルチスレッド編集の経験がないまま、無謀に swoole を使用した結果、騙されて自分の落とし穴を埋めるために数晩こっそりコーディングすることになりました。

3: onReceive によって受信されるデータはなぜ非常に大きいのですか?

サーバーは、クライアントによって送信された複数のリクエストを一度に受信できます。クライアントが 1 回送信し、サーバーが 1 回受信するわけではありません。

4: 自家製 httpserve

http サーバーを作成し、そこにアクセスしますブラウザ この自作サーバーはブラウザを更新します。なぜサーバーは 2 つのリクエストを受信しますか?この問題はおそらく、初めて swoole を使用して httpserver を作成する多くの友人を悩ませているでしょう。ブラウザは favicon.ico リクエストをもう 1 つ送信するためです。

理由

この状況の理由は、実際には非常に単純です。主に Web 開発とビジネス ロジックの作成に使用されます。サーバー プログラムの開発を理解している人はほとんどいません。一度、友人が swoole を使って簡単なサーバーとクライアントを作成したところ、コードをざっと見たところ、両方の接続が成功したにもかかわらず、なぜデータを受信できないのか尋ねられました。 onReceive コールバックは正常に設定され、コードも問題ありませんでした。最後に、サーバーとクライアントの両方がメッセージを受信するためのコールバック関数を設定していたが、どちらの側も相手にメッセージを送信していないことがわかりました。両端は膠着状態にあった。その後、swoole の担当者はこの常識的な問題について何の説明もせず、コールバックの設定方法、メッセージの送信方法、これを行う方法、あれを行う方法についてだけ話しました。サーバーサイド開発の経験がある学生の場合、この問題に遭遇することは絶対にありません。これは常識であるため、swoole ドキュメントでこれを行う必要性を指定する必要はありません。しかし、phper の場合、この点を示すことは非常に重要です。なぜなら、上で述べたように、phper はサーバーサイド開発の経験を持つプログラマーのみがこの知識を持っているからです。

Swoole の機能: ネットワーク通信フレームワーク、非同期、マルチスレッド。これらの機能はまさに PHP の不完全な機能です (公式ではこれらの機能を実現するための基本的な機能が多数提供されていますが、中国語のドキュメントが不足しており、通常の PHP ではこれらの機能を実装するために PHP を使用する人はほとんどいません)。ご存知のとおり、swoole をむやみに使用すると、swoole 公式 Web サイトでは見つからないいくつかの常識的な問題に遭遇することになります。

swoole を使用するために習得する必要があるスキル

  1. マルチスレッド プログラミング
  2. プロセス間通信
  3. ネットワークプロトコル TCP/UDP の認識
  4. PHP の基礎スキル

swoole を学習した個人的な経験

昔、私も PHP しか知らなかったプログラマーでしたが、 httpsqs を使用する必要があったため、しばらく使用した後、独自のニーズがあることがわかり、ソース コードを調べ始めました。非常に見にくいのですが、これを見て衝撃を受けました。httpsqs は単なるパッケージ化されたもので、パッケージ化されたコードはわずか 100 行です。主なアイデアは、C 言語の libevent を使用して、東京内閣データベースの読み書きリクエストを受信する http サーバーを作成することです。当時、このアイデアに基づいたプログラムが数多くありました。その後、ふと思ったのですが、C言語ではlibevent関数が使えるので、PHPでもlibeventを使ってネットワークを監視したり、リクエスト受信後のキューサービスのデータベースの読み書きができるはずです。その後、PHP の公式ドキュメントを確認したところ、PHP はこれらの機能を完了するための完全な関数システムを提供しており、マルチスレッド関数の完全なセットも提供されていることがわかりました。しかし、中国語のドキュメントが少なすぎて、成熟したコードが提供されています。オンラインではほとんど見つかりません。最後の手段として、Linux-C マルチスレッド開発の基本原則とプロセス間通信の一般的な方法を学び、それを使っていくつかの簡単なデモを作成しました。ただ感じるのは、単純な関数を書くのは設計が非常に複雑だということです。諦めかけたその時、スウールが現れた。 swoole が提供する関数は、まさに php にはない関数であり、非常に優れています。 swoole はネットワーク通信フレームワークなので、数行の簡単な設定だけでサーバーをセットアップできます。今後もビジネス コードの改善を続けていきます。 libevent 交換グループで swoole の設計が CC の最高のフレームワーク設計ではないことを学びましたが、そのハイライトは基本機能が C でカプセル化され、ビジネス機能は世界最高の言語である PHP に記述されることです。 。それ以来、スウールの穴を埋める旅が始まりました。

概要

swoole の公式ホームページの最初の文に「 」とあるように、swoole は単純な PHP フレームワークではありません。 PHP を再定義する」、古い PHP の考え方でひどいコードを書くのはやめましょう。 swoole が PHP を再アクティブ化し、php が swoole を作成しました!

3 階Xia Xiaoqiao
最近連絡した
2 階nice_cp
ワーカーマンを試してみてはいかがですか?
Re: 文水英
@nice_cp さん、workman は純粋な PHP で実装されているようで、オープンソースの製品も多く今後注目していきます。
1Farchy_yu
Swoole を PHP のメソッドに従って書くと、間違いなく非常に便利になりますトリッキー! Java や C を使用すると便利です。
Re: Wenshuaiying
@archy_yu、phper がサーバー側の機能を強化した場合、言語を変更するコストは依然としてかなり高くなります。プログラミング もう一度 swoole を使えば、あなたの生産性は Java に劣らないはずです。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
workerman和swoole性能谁更好?如何选择?workerman和swoole性能谁更好?如何选择?Dec 01, 2022 am 10:00 AM

workerman 对比 swoole 实际开发项目中,你会选择哪个?对于新手学哪个较好,有什么建议吗?

swoole和go选哪个?优缺点分析swoole和go选哪个?优缺点分析Mar 27, 2023 pm 03:29 PM

在现代的应用开发中,异步编程在高并发场景下变得越来越重要。Swoole和Go是两个非常流行的异步编程框架,它们都具有高效的异步能力,但是很多人在选择使用哪个框架时会陷入困境。本文将探讨如何选择Swoole和Go,以及它们的优缺点。

swoole怎么学?学会要多久?swoole怎么学?学会要多久?Mar 27, 2023 pm 03:29 PM

你学会 Swoole 需要多久呢?这个问题其实非常难回答,因为它涉及到很多因素,比如你的编程基础、学习动力、时间安排等等。不过,在这篇文章中,我将分享一些我自己学习 Swoole 的经验和建议,希望能够对你有所帮助。

探讨一下web服务器为什么不用swoole探讨一下web服务器为什么不用swooleMar 27, 2023 pm 03:29 PM

​Swoole是一个基于PHP的开源高性能网络通信框架,它提供了TCP/UDP服务器和客户端的实现,以及多种异步IO、协程等高级特性。随着Swoole日益流行,许多人开始关心Web服务器使用Swoole的问题。为什么当前的Web服务器(如Apache、Nginx、OpenLiteSpeed等)不使用Swoole呢?让我们探讨一下这个问题。

聊聊怎么在docker中搭建swoole环境聊聊怎么在docker中搭建swoole环境Jun 28, 2022 pm 09:02 PM

怎么在docker中搭建swoole环境?下面本篇文章给大家介绍一下用docker搭建swoole环境的方法,希望对大家有所帮助!

2023最新swoole视频教程推荐(从入门到高级)2023最新swoole视频教程推荐(从入门到高级)Oct 25, 2019 pm 02:09 PM

以下为大家整理了php异步通信框架Swoole的视频教程,不需要从迅雷、百度云之类的第三方平台下载,全部在线免费观看。教程由浅入深,有php基础的人就能学习,从安装到案例讲解,全面详细,帮助你更快更好的掌握Swoole框架!

php如何让Swoole/Pool进程池实现Redis持久连接php如何让Swoole/Pool进程池实现Redis持久连接May 27, 2023 pm 05:55 PM

php让Swoole|Pool进程池实现Redis持久连接进程池,基于Swoole\Server的Manager管理进程模块实现。可管理多个工作进程,相比Process实现多进程,Process\Pool更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能,配合Co\Server可以创建纯协程风格的,能利用多核CPU的服务端程序。Swoole进程池实现redis数据读取如下案例,通过WorkerStart启动Redis进程池,并持久读取Redis列表数据;当WorkerStop断开

怎么安装和调用Swoole(步骤分享)怎么安装和调用Swoole(步骤分享)Mar 28, 2023 am 10:17 AM

Swoole是一种基于PHP语言的网络通信框架,它能够提供异步、并发、高性能的HTTP、WebSocket以及TCP/UDP协议服务器和客户端,在开发Web服务以及网络通信应用时都有很大的用途,广泛应用于一些互联网公司。本文将介绍如何使用Swoole调用。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境