ps aft|grep tcp.php
20688 pts/7 S+ 0:00 \_ grep --color=auto tcp.php 20450 pts/4 Sl+ 0:00 \_ php tcp.php 20451 pts/4 S+ 0:00 \_ php tcp.php 20453 pts/4 S+ 0:00 \_ php tcp.php 20454 pts/4 S+ 0:00 \_ php tcp.php 20455 pts/4 S+ 0:00 \_ php tcp.php 20456 pts/4 S+ 0:00 \_ php tcp.php 20457 pts/4 S+ 0:00 \_ php tcp.php 20458 pts/4 S+ 0:00 \_ php tcp.php 20459 pts/4 S+ 0:00 \_ php tcp.php 20460 pts/4 S+ 0:00 \_ php tcp.php
tcp.phpphp
<?php /** *User: lxw *Date: 2020-01-16 */ //建立Server對象,監聽 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); $serv->set(array( 'worker_num'=>8, // worker 進程數 CPU 1~4 倍 'max_request'=>1000 )); /** * $fd:客戶端鏈接的惟一標識 * $reactor_id: 線程id */ //監聽鏈接進入事件 //事件回調函數四種方法 //1.匿名函數 $a='hello'; $b='world'; $serv->on('Connect', function ($serv, $fd,$reactor_id) use($a,$b) { echo "Client: {$reactor_id} - {$fd} Connect -{$a}-{$b}.\n"; }); //2.類靜態方法 /*class A{ static function client ($serv, $fd,$reactor_id) { echo "Client: {$reactor_id} - {$fd} Connect.\n"; } } $serv->on('Connect', 'A::Client');*/ //$serv->on('Connect', array('A','client')); //3.函數 //function my_func($serv, $fd,$reactor_id){ // echo "Client: {$reactor_id} - {$fd} Connect 22.\n"; //} //$serv->on('Connect', 'my_func'); //4.對象方法 /*class B{ function client($serv, $fd,$reactor_id){ echo "Client: {$reactor_id} - {$fd} Connect 22.\n"; } } $obj=new B(); $serv->on('Connect', array($obj,'client'));*/ //監聽數據接收事件 $serv->on('Receive', function ($serv, $fd, $reactor_id, $data) { $serv->send($fd, "Server: {$reactor_id} - {$fd} ".$data); }); //監聽鏈接關閉事件 $serv->on('Close', function ($serv, $fd) { echo "Client: Close.\n"; }); //啓動服務器 $serv->start(); //使用 telnet 127.0.0.1 9501 // netstat -anp|grep 9501
tcp_client.phpreact
<?php /** *User: lxw *Date: 2020-01-17 */ //鏈接 TCP 服務 $client=new swoole_client(SWOOLE_SOCK_TCP); if (!$client->connect('0.0.0.0',9501)){ echo '鏈接失敗'; exit(); } //php cli 常量 fwrite(STDOUT,'請輸入消息:'); $msg=trim(fgets(STDIN)); //發送消息給tcp server 服務器 $client->send($msg); //接受來自server 的數據 $result=$client->recv(); echo $result;