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
<?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('127.0.0.1','9501',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();
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
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ême3 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 avons donc besoin de plusieurs ateliers (multi-processus) et de plusieurs employés (threads) pour améliorer l'efficacité
Chaque fois que vous modifiez le fichier script du serveur, vous devez
fermer le processus et
réouvrir pour que cela prenne effet
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);
nc. installation :
yum -y install yum -y install nc.x86_64 Utilisez-le directement nc -u 127.0 0.1 9502
//创建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 de test nc
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 phpCe 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!