swoole_tcp服务器

2019-05-30  本文已影响0人  骑代码奔小康

一、swoole的tcp服务第一次封装

<?php
//创建Server对象,监听 127.0.0.1:80端口
$serv = new swoole_server("0.0.0.0", 80); 

$serv->set([
    // 'reactor_num' => 2, // 设置为CPU核数
    'worker_num' => 4, // worke进程数  CPU的 1-4倍
    'max_request' => 10000 // worker进程的最大任务数
]);

/**
 * 监听连接进入事件
 * $fd客户端连接的唯一标识
 * $reactor_id 线程的id
*/
$serv->on('connect', function ($serv, $fd, $reactor_id) {  
    echo "Client: {$reactor_id}'----'{$fd}\n";
});

//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, "Server: ".$data);
});

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

//启动服务器
$serv->start(); 
  1. 写好以后 打开命令窗口 执行 php tcp_server.php ,有连接就会执行connet事件,窗口就会打印出(线程id和用户id)


    image.png
  2. 在一个新窗口执行 netstat -anp|grep 80 查看监听的端口


    image.png

    3.使用命令 ps aft | grep tcp_server.php 可以查看到 tcp服务器开启的进程数,这个数量与 ('worker_num' => 4, // worke进程数 CPU的 1-4倍)的数量一致


    image.png
  1. 新开一个窗口连接tcp服务器,发送456789,服务端就会执行receive 里的send方法给用户推送456789


    image.png

二、tcp客户端

$client = new swoole_client(SWOOLE_SOCK_TCP);

//连接到服务器
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    die("connect failed.");
}
//向服务器发送数据
if (!$client->send("这次不是hello world"))
{
    die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{
    die("recv failed.");
}
echo $data; // 服务器接收到的数据
//关闭连接
$client->close();

在命令窗口中执行 php tcp_client.php
就可以看到服务器返回的 数据!

image.png
上一篇 下一篇

猜你喜欢

热点阅读