Maison >développement back-end >tutoriel php >Comment utiliser swoole pour créer un serveur (Partie 1)

Comment utiliser swoole pour créer un serveur (Partie 1)

不言
不言original
2018-07-11 11:39:512267parcourir

Cet article présente principalement l'un des serveurs de création swoole, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

1. 🎜 >

Créons d'abord un serveur TCP selon le document

<?php //创建服务器 参数分别是 
//监听的地址 127.0.0.1 表示监听本机,0.0.0.0表示监听所有地址
//9501 端口号 这个你随便定都行只要没被占用过(netstat -an | grep 查看端口使用情况) 如果被占用就使用 命令 kill杀死进程
//SWOOLE_PROCESS 为多进程模式,一般这里不传值,默认为多进程 SWOOLE_BASE为基本模式 
//SWOOLE_SOCK_TCP 也就是说创建tcp服务器 
$serv=new swoole_server(&#39;127.0.0.1&#39;,&#39;9501&#39;,SWOOLE_PROCESS,SWOOLE_SOCK_TCP);

//服务器设置参数
$serv->set([
'worker_num'=>4,  //worker进程数 一般为cpu数的 1-4倍
'max_request'=>10000, //worker进程在处理完n次请求后结束运行重建一个
]);
//这里
//当然还有很多设置的参数 文档传送门:https://wiki.swoole.com/wiki/page/13.html

//监听连接进入事件(这里是一个闭包写法)连接后调用的函数
//$fd客户端连接的唯一标示
//$reactor_id 线程id 是一个自增数字,范围是1 ~ 1600万,fd超过1600万后会自动从1开始进行复用
$serv->on('connect', function ($serv, $fd, $reactor_id) {
    echo "Client: {$reactor_id} - {$fd}-Connect.\n";
});

//监听数据接收事件
//$data就是接收的数据
$serv->on('receive', function ($serv, $fd, $reactor_id, $data)) {
    $serv->send($fd, "Server: ".$data);
    echo '收到了数据'.$data;
});

//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close".$fd."\n";
});

//启动服务器
$serv->start();
ok testons php tcp.php pour ouvrir le serveur TCP (si le port est occupé, tuez le processus occupant le port, fermez Utilisez ctrl+c pour éteindre, ctrl+z pour suspendre)


Comment utiliser swoole pour créer un serveur (Partie 1)

Ensuite, ouvrez telnet (nous devons ouvrir un autre terminal) pour tester si cela a réussi, entrez simplement eqqeq

Comment utiliser swoole pour créer un serveur (Partie 1)

Regardez à nouveau le serveur TCP

Comment utiliser swoole pour créer un serveur (Partie 1)

Voyant cela, faisons le tri dans nos pensées : serveur TCP créé->serveur de connexion Telnet->tcp exécute la connexion->telnent envoie des informations->tcp écoute l'événement de réception->telnent se déconnecte->tcp écoute l'événement de fermeture

Question


1. La relation entre le serveur et telnetLa relation entre le serveur et le client Un serveur correspond à plusieurs telnets

2.$ serv->send($fd , "Server: ".$data); Quelle est la différence entre la sortie directe d'écho ?

Envoyer consiste à envoyer des données à l'autre partie (connectée à mon serveur). Par exemple, si vous utilisez WeChat pour discuter avec vos amis et que vous envoyez un serveur : ".$data, alors cela équivaut à envoyer le message Envoyé à votre ami, et l'écho est le contenu de sortie, uniquement pour vous-même

3 Que sont les threads et les processus sont équivalents à ceux-là ? dans une usine (CPU). Plusieurs ateliers (processus)
Un atelier (processus) a de nombreux travailleurs (threads)
Il y a des toilettes (mémoire partagée) dans l'atelier, qui peuvent être partagées par tous les travailleurs, mais il faut attendre que les ouvriers aient fini de l'utiliser avant de pouvoir entrer

Nous utilisons généralement PHP en un seul processus. Pour une si grande usine, il est bien sûr lent d'utiliser un seul atelier

. Nous avons donc besoin de plusieurs ateliers (multi-processus) et de plusieurs employés (threads) pour améliorer l'efficacité

Remarque :

Chaque fois que vous modifiez le fichier script du serveur, vous devez
fermer le processus et
réouvrir pour que cela prenne effet

2. Créer un serveur udp

1.TCP core ucp sont tous des protocoles de couche de transport, mais un serveur UDP est différent du serveur TCP. UDP

n'a aucune notion de connexion. UDP consomme moins de ressources mais est rapide Après le démarrage du serveur, le client peut directement envoyer des paquets de données au port 9502 surveillé par le serveur sans connexion.

2. La méthode de création d'udp est très similaire à TCP

//就是把最后一个参数改为 SWOOLE_SOCK_UDP 
$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
3 Vous pouvez utiliser netcat -u au lieu de telnet pour vous connecter et tester

nc. installation :

yum -y install yum -y install nc.x86_64 Utilisez-le directement nc -u 127.0 0.1 9502

Implémentation complète

5. Test, nous ouvrons également 2 terminaux
//创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP
$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
 
//udp没有 $serv->on connect的概念

//监听数据接收事件
$serv->on('Packet', function ($serv, $data, $clientInfo) {
    $serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
    var_dump($clientInfo);
});

//启动服务器
$serv->start();
serveur udp ici nous avons imprimé $clientInfo


Comment utiliser swoole pour créer un serveur (Partie 1)serveur de test nc

Comment utiliser swoole pour créer un serveur (Partie 1)

ok test pas de problème^-^

Ce qui précède est le contenu de cet article. Tout le contenu, j'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe. , veuillez faire attention au site Web PHP chinois

Recommandations associées :

Introduction à Swoole pour l'apprentissage Swooled


Comment réécrire le mécanisme de stockage de session en php

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn