Pourquoi Swoole est-il passé du début à l'abandon ?
Tutoriel swoolePrésentation des raisons pour lesquelles, du début à l'abandon
Recommandé (gratuit) : Tutoriel swoole
1. Installation du paquet source swoole
- Téléchargez le code source swoole :
git clone https://gitee.com/swoole/swoole.git
-
Via phpize (étendre le module d'extension php, créer un module de plug-in php) :
cd swoole
- Exécution :
your/phpize/path
./configure --with-php-config=your/php/path/bin/php-config
make && make install
-
Vous pouvez voir l'emplacement de swoole.so
- Mon emplacement est :
/opt/soft/php/lib/php/extensions/no-debug-non-zts-20170718/
- Mon emplacement est :
-
Configuration php.ini
- Ajouter
extension=swoole.so
- Ajouter
- Grâce à la commande
php -m
, vous pouvez voir le module d'extension php -
Détecter que swoole est installé avec succès et que php prend en charge swoole
cd your/swoole/path/examples/server
-
php echo.php
(si le processus est bloqué, cela signifie succès) -
netstat -anp | grep 9501
(Afficher le numéro de port ouvert par swoole)
2. Moteur de communication réseau
Pour apprendre swoole, vous besoin de lire la documentation. document swoole
1. Créez le service TCP le plus simple via swoole
serveur TCP (tcp_server.php)
//创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); $serv->set([ 'worker_num' => 4, // worker进程数,cpu 1-4倍 'max_request' => 100, ]); /** * 监听连接进入事件 * $fd 客户端连接服务端的唯一标识 * $reactor_id 线程id */ $serv->on('connect', function ($serv, $fd, $reactor_id) { echo "Client: {$fd} - {$reactor_id} - Connect.\n"; }); //监听数据接收事件 $serv->on('receive', function ($serv, $fd, $reactor_id, $data) { $serv->send($fd, "Server: ".$data); }); //监听连接关闭事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //启动服务器 $serv->start();
client TCP (tcp_client.php)
// 创建tcp客户端 $client = new swoole_client(SWOOLE_SOCK_TCP); // 连接tcp服务端 if (!$client->connect("127.0.0.1", 9501)) { echo '连接失败'; exit; } // php cli fwrite(STDOUT, '请输入:'); $msg = trim(fgets(STDIN)); // 发送消息给tcp服务端 if (!$client->send($msg)) { echo '发送消息失败'; exit; } // 接收 $result = $client->recv(); echo $result;
2. Extension : Quatre rappels de php
- Fonction anonyme
$server->on('Request', function ($req, $resp) { echo "hello world"; });
- Méthode statique de classe
class A { static function test($req, $resp) { echo "hello world"; } } $server->on('Request', 'A::Test'); $server->on('Request', array('A', 'Test'));
- Fonction
function my_onRequest($req, $resp) { echo "hello world"; } $server->on('Request', 'my_onRequest');
- Méthode objet
class A { function test($req, $resp) { echo "hello world"; } } $object = new A(); $server->on('Request', array($object, 'test'));
Conseils : Affichez les processus de travail ouverts : ps aft | grep tcp_server.php
3 Le serveur et le client udp peuvent être créés par vous-même selon la documentation
4. Service http
// 监听所有地址和9501端口
$http = new swoole_http_server('0.0.0.0', 9501);
// 动静分离配置
$http->set([
// 开启静态请求
'enable_static_handler' => true,
// 静态资源目录
'document_root' => '/opt/app/code1/',
]);
$http->on('request', function ($request, $response) {
// 获取get请求的参数
$param = json_encode($request->get);
// 设置cookie
$response->cookie('name', 'ronaldo', time() + 1800);
// 输出到页面
$response->end("<h1>Hello Swoole - {$param}</h1>");
});
// 开启http服务
$http->start();
Copier après la connexion
// 监听所有地址和9501端口 $http = new swoole_http_server('0.0.0.0', 9501); // 动静分离配置 $http->set([ // 开启静态请求 'enable_static_handler' => true, // 静态资源目录 'document_root' => '/opt/app/code1/', ]); $http->on('request', function ($request, $response) { // 获取get请求的参数 $param = json_encode($request->get); // 设置cookie $response->cookie('name', 'ronaldo', time() + 1800); // 输出到页面 $response->end("<h1>Hello Swoole - {$param}</h1>"); }); // 开启http服务 $http->start();
5. Créer un service websocket via swooleserveur websocket (websocket_server.php)
client websocket ( websockt_client.html)// 监听所有地址和9502端口 $server = new swoole_websocket_server('0.0.0.0', 9502); // 动静分离配置 $server->set([ // 开启静态请求 'enable_static_handler' => true, // 静态资源目录 'document_root' => '/opt/app/swoole/websocket', ]); $server->on('open', function ($server, $request) { echo "server:handshake success with fd - {$request->fd}\n"; }); $server->on('message', function ($server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($server, $fd) { echo "client - {$fd} - close\n"; }); $server->start();Copier après la connexion
// 创建websocket实例 var websocketURL = "ws://www.rona1do.top:9502"; var websocket = new WebSocket(websocketURL); // 实例化对象的onopen属性 websocket.onopen = function (ev) { websocket.send("hello-websocket"); console.log("connect-swoole-success"); } // 实例化对象的onmessage属性,接收服务端返回的数据 websocket.onmessage = function (ev) { console.log("websockect-server-return-data:" + ev.data); } // close websocket.onclose = function (ev) { console.log("close"); }Copier après la connexion
6. Utiliser l'orientation objet pour optimiser le code du service Websocket
class WebSocket {
const HOST = '0.0.0.0';
const PORT = 9502;
private $ws = null;
function __construct()
{
$this->ws = new swoole_websocket_server(self::HOST, self::PORT);
$this->ws->on('open', [$this, 'onOpen']);
$this->ws->on('message', [$this, 'onMessage']);
$this->ws->on('close', [$this, 'onClose']);
$this->ws->start();
}
// 监听websocket连接事件
function onOpen($server, $request) {
echo "server: handshake success with fd{$request->fd}\n";
}
// 监听websocket消息接收事件
function onMessage($server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
$server->push($frame->fd, "this is server");
}
// 监听客户端关闭事件
function onClose($server, $fd) {
echo "Client:{$fd} closes\n";
}
}
Copier après la connexion
class WebSocket { const HOST = '0.0.0.0'; const PORT = 9502; private $ws = null; function __construct() { $this->ws = new swoole_websocket_server(self::HOST, self::PORT); $this->ws->on('open', [$this, 'onOpen']); $this->ws->on('message', [$this, 'onMessage']); $this->ws->on('close', [$this, 'onClose']); $this->ws->start(); } // 监听websocket连接事件 function onOpen($server, $request) { echo "server: handshake success with fd{$request->fd}\n"; } // 监听websocket消息接收事件 function onMessage($server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); } // 监听客户端关闭事件 function onClose($server, $fd) { echo "Client:{$fd} closes\n"; } }
7. Cas de tâche dans swoole
onTask : est appelé dans le processus task_worker. Le processus de travail peut utiliser la fonction swoole_server_task pour fournir de nouvelles tâches au processus task_worker. Lorsque le processus de tâche actuel appelle la fonction de rappel onTask, il fera passer l'état du processus à occupé et ne recevra plus de nouvelles tâches. Lorsque la fonction onTask reviendra, elle fera passer l'état du processus à inactif et continuera à recevoir de nouvelles tâches.
onFinish : Lorsque la tâche délivrée par le processus de travail est terminée dans task_worker, le processus de tâche enverra le résultat du traitement de la tâche au processus de travail via la méthode swoole_server->finish() .class Websocket { const HOST = '0.0.0.0'; const PORT = 9502; private $ws = null; public function __construct() { $this->ws = new swoole_websocket_server(self::HOST, self::PORT); $this->ws->set([ 'worker_num' => 2, 'task_worker_num' => 2, // 要想使用task必须要指明 ]); $this->ws->on('open', [$this, 'onOpen']); $this->ws->on('message', [$this, 'onMessage']); $this->ws->on('task', [$this, 'onTask']); $this->ws->on('finish', [$this, 'onFinish']); $this->ws->on('close', [$this, 'onClose']); $this->ws->start(); } public function onOpen($server, $request) { echo "server:handshake success with fd:{$request->fd}\n"; } public function onMessage($server, $frame) { echo "receive from {$frame->fd}:{$frame->data}\n"; // 需要投递的任务数据 $data = [ 'fd' => $frame->fd, 'msg' => 'task', ]; $server->task($data); $server->push($frame->fd, 'this is server'); } // 处理投递的任务方法,非阻塞 public function onTask($server, $task_id, $worker_id, $data) { print_r($data); // 模拟大量数据的操作 sleep(10); return "task_finish"; } // 投递任务处理完毕调用的方法 public function onFinish($server, $task_id, $data) { echo "task_id:{$task_id}\n"; echo "task finish success:{$data}\n"; } public function onClose($server, $fd) { echo "Client:close"; } }Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'utilisation des coroutines Swoole dans Laravel peut traiter un grand nombre de requêtes simultanément. Les avantages incluent : Traitement simultané : permet de traiter plusieurs requêtes en même temps. Hautes performances : Basé sur le mécanisme d’événements Linux epoll, il traite efficacement les requêtes. Faible consommation de ressources : nécessite moins de ressources serveur. Facile à intégrer : intégration transparente avec le framework Laravel, simple à utiliser.

Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Swoole est un framework de communication réseau hautes performances, asynchrone et simultané basé sur le langage PHP. Il fournit une série de fonctions réseau et peut être utilisé pour implémenter des serveurs HTTP, des serveurs WebSocket, etc. Dans cet article, nous présenterons comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances et fournirons des exemples de code spécifiques. Configuration de l'environnement Tout d'abord, nous devons installer l'extension Swoole sur le serveur

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Swoole Process permet aux utilisateurs de changer. Les étapes spécifiques sont les suivantes : créer un processus ; définir l'utilisateur du processus pour démarrer le processus ;

Comparaison des performances : Débit : Swoole a un débit plus élevé grâce à son mécanisme de coroutine. Latence : la commutation de contexte de coroutine de Swoole a une surcharge et une latence plus faibles. Consommation de mémoire : les coroutines de Swoole occupent moins de mémoire. Facilité d'utilisation : Swoole fournit une API de programmation simultanée plus facile à utiliser.

Pour redémarrer le service Swoole, procédez comme suit : Vérifiez l'état du service et obtenez le PID. Utilisez "kill -15 PID" pour arrêter le service. Redémarrez le service en utilisant la même commande que celle utilisée pour démarrer le service.

Swoole en action : Comment utiliser les coroutines pour le traitement de tâches simultanées Introduction Dans le développement quotidien, nous rencontrons souvent des situations où nous devons gérer plusieurs tâches en même temps. La méthode de traitement traditionnelle consiste à utiliser plusieurs threads ou multi-processus pour réaliser un traitement simultané, mais cette méthode présente certains problèmes de performances et de consommation de ressources. En tant que langage de script, PHP ne peut généralement pas utiliser directement des méthodes multithread ou multi-processus pour gérer les tâches. Cependant, avec l'aide de la bibliothèque de coroutines Swoole, nous pouvons utiliser des coroutines pour obtenir un traitement de tâches simultanées hautes performances. Cet article présentera

Swoole est un framework de développement réseau PHP hautes performances. Grâce à son puissant mécanisme asynchrone et à ses fonctionnalités basées sur les événements, il peut créer rapidement des applications serveur à haute concurrence et à haut débit. Cependant, à mesure que l'activité continue de se développer et que le niveau de concurrence augmente, l'utilisation du processeur du serveur peut devenir un goulot d'étranglement, affectant les performances et la stabilité du serveur. Par conséquent, dans cet article, nous présenterons comment optimiser l'utilisation du processeur du serveur tout en améliorant les performances et la stabilité du serveur Swoole, et fournirons des exemples de code d'optimisation spécifiques. un,
