EasySwoole教程

EasySwoole

1、查询被占用端口
netstat -ntlp

2、杀死进程,被占用端口
kill 端口           //这个无法杀死时,使用下面这个
killall php        //杀死所有php进程
kill -9 PID       //PID端口

3、框架安装
composer require easyswoole/easyswoole=3.5.x
php vendor/easyswoole/easyswoole/bin/easyswoole install

更新命名空间
composer dump-autoload

启动
php easyswoole server start
守护模式启动
php easyswoole server start -d
守护模式启动的时候停止服务
php easyswoole server stop

4、其他
查看easyswoole安装的配置,如安装的mysqli等等
composer info | grep easyswoole

查看swoole版本
php --ri swoole

卸载mysqli
composer remove easyswoole/mysqli
安装orm,orm自带mysqli,如果安装了mysqli,在执行下面安装orm会报错
composer require easyswoole/orm

不能运行
删掉vendor和easyswoole还有composer.lock
重新安装

安装excel

composer require phpoffice/phpexcel

redis安装和配置

安装redis
composer require easyswoole/redis
安装redis连接池
composer require easyswoole/redis-pool

配置,在(根目录EasySwooleEvent.php的initialize方法加入)
//redis连接池注册(config默认为127.0.0.1,端口6379)
$redis = RedisPool::getInstance()->register(new \EasySwoole\Redis\Config\RedisConfig(
    [
        'host'      => '127.0.0.1',
        'port'      => '6379',
        'auth'      => '123456',//密码,没有就留空
    ]
));
//配置连接池连接数
$redis->setMinObjectNum(5);
$redis->setMaxObjectNum(20);

在控制器中使用
引入
use EasySwoole\RedisPool\RedisPool;
使用
$redis = RedisPool::defer();
//key,数据,时间(秒)
$redis->set('name',1,10);
$name = $redis->get('name');

//获取连接池对象(返回bool(true))
$redisPool = RedisPool::getInstance()->getPool();
$redis = $redisPool->getObj();
$redisPool->recycleObj($redis);

新环境不能运行

删掉vendor和easyswoole还有composer.lock
 
composer require easyswoole/easyswoole=3.5.x
php vendor/easyswoole/easyswoole/bin/easyswoole install

安装mysql
composer require easyswoole/orm
安装redis
composer require easyswoole/redis
安装redis连接池
composer require easyswoole/redis-pool
 

测试工具

安装ab工具
yum -y install httpd-tools
查看安装目录
which ab
查看版本
ab -V
使用,发起1000个请求(请求1000次),并发100(同时100个用户请求)
ab -n 1000 -c 100 https://baidu.com/
ab -n 1000 -c 100 http://47.99.53.108:9501/User/dade

测试数据说明(服务器1核1G),请求5万,并发100
Benchmarking 47.99.53.108 (be patient)         //基准47.99.53.108(耐心等待)
Completed 5000 requests						   //已完成5000个请求
Completed 10000 requests                       
Completed 15000 requests                       
Completed 20000 requests                     
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        EasySwoole             //服务器软件:EasySwoole
Server Hostname:        47.99.53.108           //服务器主机名:127.0.0.1
Server Port:            9501                   //服务器端口:9501

Document Path:          /User/dade             //文档路径:/User/dade
Document Length:        28 bytes               //文件长度:28字节

Concurrency Level:      100                    //并发级别:100
Time taken for tests:   66.061 seconds         //测试所用时间:66.061秒
Complete requests:      50000                  //完成申请:50000
Failed requests:        0                      //失败的请求:0
Write errors:           0                      //写入错误:0
Total transferred:      9450000 bytes          //传输总量:9450000字节
HTML transferred:       1400000 bytes          //传输的HTML:1400000字节
Requests per second:    756.88 [#/sec] (mean)  //每秒请求数:756.88[#秒](平均值)
Time per request:       132.122 [ms] (mean)    //每次请求的时间:132.122[ms](平均值)
Time per request:       1.321 [ms] (mean, across all concurrent requests)    //每个请求的时间:1.321[ms](所有并发请求的平均时间)
Transfer rate:          139.70 [Kbytes/sec] received  //传输速率:接收到139.70[千字节/秒]

Connection Times (ms)                           //连接时间(毫秒)
              min  mean[+/-sd] median   max     //最小平均值[+/-sd]最大中值
Connect:        3   79 279.8      4    4081     //连接:379279.844081
Processing:     6   49 148.2     15    5102     //处理:649148.215102
Waiting:        6   45 145.1     15    5102     //等候电话:645145.115102
Total:          9  128 326.6     20    7115     //总数:9128326.6207115

Percentage of the requests served within a certain time (ms)  //在特定时间内服务的请求百分比(毫秒)
  50%     20                                    //50% 20
  66%     32
  75%     43
  80%     56
  90%    245
  95%   1023
  98%   1048
  99%   1235
 100%   7115 (longest request)                  //100% 7115(最长请求)

控制器

控制器正常创建
App/HttpController/ 目录下创建,文件名首字母大写,控制器名首字母大写
根据创建目录和控制器访问,方法小写

安装orm操作数据库(配置,创建模型,使用模型查询)

安装,如果报错看上面的报错
composer require easyswoole/orm

可以在框架 initialize 主服务创建事件中注册连接
主方法在根目录的EasySwooleEvent.php文件

1、配置mysql连接(在根目录EasySwooleEvent.php)
public static function initialize()
{
    $config = new Config();
    $config->setDatabase('easyswoole_orm');//数据库
    $config->setUser('easyswoole_orm');//用户名
    $config->setPassword('iaPrA78EmEx6kAEC');//密码
    $config->setHost('127.0.0.1');
    $config->setPort(3306);
    $config->setCharset('utf8mb4');
    $config->setTimeout(15); // 超时时间
    //连接池配置
    $config->setGetObjectTimeout(3.0); //设置获取连接池对象超时时间
    $config->setIntervalCheckTime(30*1000); //设置检测连接存活执行回收和创建的周期
    $config->setMaxIdleTime(15); //连接池对象最大闲置时间(秒)
    $config->setMinObjectNum(5); //设置最小连接池存在连接对象数量
    $config->setMaxObjectNum(20); //设置最大连接池存在连接对象数量
    $config->setAutoPing(5); //设置自动ping客户端链接的间隔
    DbManager::getInstance()->addConnection(new Connection($config));
}

2、创建模型(开始都是没有文件的,自己创建)
在App\HttpController\Models中创建
创建User.php模型
<?php
namespace App\HttpController\Models;
use EasySwoole\ORM\AbstractModel;
class User extends AbstractModel
{
    /**
     * @var string
     */
    protected $tableName = 'dade_user';
}

3、使用(在控制器User中使用)
引入模型
use App\HttpController\Models\User as users;
使用查询并返回
$res = users::create()->get(1);
$this->writeJson(200,$res,"success");

原生sql查询

引入
use EasySwoole\Mysqli\QueryBuilder;
use EasySwoole\ORM\DbManager;

代码
$queryBuild = new QueryBuilder();//new一个执行查询原生
$queryBuild->raw("select * from dade_user where id= 1");//sql
$data = DbManager::getInstance()->query($queryBuild, true, 'default')->toArray();//升级版,执行sql语子
$this->jsonData(200,$data['result']);//返回,这个是我自己编写的,你们请使用官网上的$this->writeJson(200,['name'=>'大得']);

模型新增

新增一条
$user['name'] = '大得';
$user['phone'] = '1336677';
users::create($user)->save();

批量新增,dade_user是表名
users::create()->func(function ( QueryBuilder $builder){
    $builder->insertAll('dade_user', [
        [
            'name' => '大得1',
            'phone' => 1336677,
        ],
        [
            'name' => '大得2',
            'phone' => 1336677,
        ],
    ]);
});

模型修改

$datas['name'] = "大得6669999";
$user = users::create()->where("id",1)->update($datas);

原生更新法
$datas['name'] = "大得6669999";
$user = users::create()->where("id=2")->update($datas);

模型删除

删除全表数据,清空
users::create()->destroy(null,true);
删除
users::create()->where('id',1)->destroy();
users::create()->destroy(['id' => 1]);

获得域名后面的链接做token登录

//全局中间件判断登录,获得$request->getServerParams()
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_ON_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response) {
$cookie = $request->getCookieParams('user_cookie');
    // 对 cookie 进行判断,比如在数据库或者是 redis 缓存中,存在该 cookie 信息,说明用户登录成功
    $isLogin = false;
    if ($isLogin) {
       // 返回 true 表示继续往下执行控制器 action
       return true;
    } else {
       // 这一步可以给前端响应数据,告知前端未登录
       $data = Array(
           "code" => 200,
           "result" =>  $request->getServerParams(),
            "msg" => '请先登录'
       );
       $response->withHeader('Content-Type', 'application/json;charset=utf-8');
       $response->withStatus(200);
       $response->write(json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
       // 返回 false 表示不继续往下执行控制器 action
       return false;
    }
});

跨域(跨域和效验登录是一起的)

\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_ON_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response): bool {
            ###### 处理请求的跨域问题 ######
            $response->withHeader('Access-Control-Allow-Origin', '*');
            $response->withHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
            $response->withHeader('Access-Control-Allow-Credentials', 'true');
            $response->withHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
            if ($request->getMethod() === 'OPTIONS') {
                $response->withStatus(\EasySwoole\Http\Message\Status::CODE_OK);
                return false;
            }
            return true;
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
easyswoole是一个基于Swoole扩展的PHP框架,它提供了一种简单且高效的方式来构建WebSocket应用程序。WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端发起请求。 使用easyswoole可以轻松地创建和管理WebSocket服务器,并处理来自客户端的连接、消息和事件。下面是一个简单的示例代码,演示了如何使用easyswoole创建一个WebSocket服务器: ```php <?php use EasySwoole\EasySwoole\ServerManager; use EasySwoole\EasySwoole\Swoole\EventRegister; use EasySwoole\EasySwoole\AbstractInterface\Event; use Swoole\WebSocket\Frame; use Swoole\WebSocket\Server; // 注册WebSocket事件回调 Event::getInstance()->set(EventRegister::onMessage, function (Server $server, Frame $frame) { // 处理收到的消息 $data = $frame->data; // TODO: 处理消息逻辑 // 向客户端发送消息 $server->push($frame->fd, 'Hello, client!'); }); // 创建WebSocket服务器 $server = ServerManager::getInstance()->getSwooleServer(); $server->on('WorkerStart', function () { echo "WebSocket server started\n"; }); // 启动服务器 EasySwoole\EasySwoole\Core::getInstance()->initialize(); ``` 上述代码中,我们首先注册了一个`onMessage`事件回调函数,用于处理收到的消息。在这个示例中,我们简单地向客户端发送了一条回复消息。然后,我们创建了一个WebSocket服务器,并在`WorkerStart`事件回调中输出了一条启动消息。最后,我们使用`EasySwoole\EasySwoole\Core::getInstance()->initialize()`启动了服务器。 请注意,上述代码只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理不同的消息和事件。你可以根据自己的需求进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大得369

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值