ホームページ  >  記事  >  バックエンド開発  >  swooleを使ってサーバーを作成する方法(前編)

swooleを使ってサーバーを作成する方法(前編)

不言
不言オリジナル
2018-07-11 11:39:512225ブラウズ

この記事では、主に swoole 作成サーバーの 1 つを紹介します。このサーバーは、一定の参考価値があります。今、皆さんに共有します。必要な友人は、それを参照してください。

1. TCP サーバーを作成します

最初にドキュメントに従って 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(&#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 php tcp.php をテストして TCP サーバーを開きます (ポートが占有されている場合は、ポートを占有しているプロセスを強制終了して、中断するには Ctrl C を使用し、一時停止するには Ctrl Z を使用します)
swooleを使ってサーバーを作成する方法(前編)

Telnet を開いて (別の端末を開く必要があります)、成功したかどうかをテストします。eqqeq

と入力するだけです。 swooleを使ってサーバーを作成する方法(前編)

TCP サーバーをもう一度見てください

swooleを使ってサーバーを作成する方法(前編)

これを見たときの考えを整理してみましょう:
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

には接続の概念がありません。UDP は比較的小さいリソースを消費しますが、高速です。

サーバーを起動した後、クライアントは、接続せずにサーバーによって監視されている 9502 ポートにデータ パケットを直接送信できます。2.udp は tcp

//就是把最后一个参数改为 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 テスト サーバー

swooleを使ってサーバーを作成する方法(前編)# を出力しました。

##ok テストは問題ありません^-^

上記がこの記事の全内容です。皆様の学習に役立つことを願っています。その他の関連コンテンツについては、 PHP 中国語 Web サイト!

swooleを使ってサーバーを作成する方法(前編)関連する推奨事項:


Swooled Learning - Swoole の概要

方法php

のセッションストレージメカニズムを書き換えます

以上がswooleを使ってサーバーを作成する方法(前編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。