この記事では、主に swoole 作成サーバーの 1 つを紹介します。このサーバーは、一定の参考価値があります。今、皆さんに共有します。必要な友人は、それを参照してください。
最初にドキュメントに従って TCP サーバーを作成します
<?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();
ok php tcp.php をテストして TCP サーバーを開きます (ポートが占有されている場合は、ポートを占有しているプロセスを強制終了して、中断するには Ctrl C を使用し、一時停止するには Ctrl Z を使用します)
Telnet を開いて (別の端末を開く必要があります)、成功したかどうかをテストします。eqqeq
と入力するだけです。
TCP サーバーをもう一度見てください
これを見たときの考えを整理してみましょう:
Created TCP サーバー -> Telnet がサーバーに接続 -> TCP が接続を実行 -> Telnent が情報を送信 -> TCP が受信イベントをリッスン -> Telnent が切断 -> TCP がクローズ イベントをリッスン
質問
1.サーバーとtelnetの関係
サーバーとクライアントの関係、1台のサーバーが複数のtelnetに対応します
2.$serv- >send($fd, "Server: ".$data); echoを直接出力する場合との違いは何ですか?
send は、(自分のサーバーに接続されている) 相手にデータを送信することです。たとえば、WeChat を使用して友達とチャットし、サーバーに「.$data」を送信するとします。これは、「友達に送信されました」というメッセージを送信するのと同じであり、エコー出力の内容は自分自身専用です。工場 (CPU) 複数のワークショップ (プロセス)
ワークショップ (プロセス) には多数のワーカー (スレッド) がいます ワークショップにはトイレ (共有メモリ) があり、すべてのワーカーが共有できますが、従業員が使い終わるまで待ってから入るようにしてください通常、PHP は 1 つのプロセスで使用します。このような大規模な工場の場合、1 つのワークショップを使用するのは当然時間がかかります。効率を高めるには複数のワークショップ (マルチプロセス) と複数の従業員 (スレッド) が必要です
注:
サーバー スクリプト ファイルを変更するたびに、
再度開く必要があります
有効にするには
2. udp サーバーを作成します
1. TCP コア ucp はトランスポート層プロトコルですが、UDP サーバーは UDP サーバーとは異なります。 TCP サーバー。UDP
//就是把最后一个参数改为 SWOOLE_SOCK_UDP $serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
3 と同様の方法で作成されます。UDP サーバーを使用できます。Telnet の代わりに netcat -u を使用して接続し、nc インストールをテストします:
yum -y install yum -y install nc.x86_64直接使用します
nc -u 127.0.0.1 9502
4. 完全な実装//创建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();
5. テスト。2 つのターミナルも開きます。udp サーバーここでは、$clientInfo
nc テスト サーバー
# を出力しました。
##ok テストは問題ありません^-^上記がこの記事の全内容です。皆様の学習に役立つことを願っています。その他の関連コンテンツについては、 PHP 中国語 Web サイト!関連する推奨事項:
Swooled Learning - Swoole の概要
のセッションストレージメカニズムを書き換えます以上がswooleを使ってサーバーを作成する方法(前編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。