tp6 集成swoole

swoole不能在windows运行,我们在linux系统上部署项目运行,在使用前必须安装好swoole

linux安装好swoole后,就可以在tp6框架下载集成 swoole模块,如下:

使用 composer 安装 think-swoole 扩展。即执行 composer require topthink/think-swoole

然后在config目录下自动生成一个swoole.php的配制文件,修改配制文件内容如下

修改监听IP和端口号、options 里的daemonize改成true,默认为false,之前没有修改报很多错误,无法运行起来,pool连接池enable改为true

<?php

use think\swoole\websocket\socketio\Handler;

return [
    'server'     => [
        'host'      => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址
        'port'      => env('SWOOLE_PORT', 8090), // 监听端口
        'mode'      => SWOOLE_PROCESS, // 运行模式 默认为SWOOLE_PROCESS
        'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP
        'options'   => [
            'pid_file'              => runtime_path() . 'swoole.pid',
            'log_file'              => runtime_path() . 'swoole.log',
            'daemonize'             => true,
            // Normally this value should be 1~4 times larger according to your cpu cores.
            'reactor_num'           => swoole_cpu_num(),
            'worker_num'            => swoole_cpu_num(),
            'task_worker_num'       => swoole_cpu_num(),
            'enable_static_handler' => true,
            'document_root'         => root_path('public'),
            'package_max_length'    => 20 * 1024 * 1024,
            'buffer_output_size'    => 10 * 1024 * 1024,
            'socket_buffer_size'    => 128 * 1024 * 1024,
        ],
    ],
    'websocket'  => [
        'enable'        => false,
        'handler'       => Handler::class,
        'ping_interval' => 25000,
        'ping_timeout'  => 60000,
        'room'          => [
            'type'  => 'table',
            'table' => [
                'room_rows'   => 4096,
                'room_size'   => 2048,
                'client_rows' => 8192,
                'client_size' => 2048,
            ],
            'redis' => [
                'host'          => '127.0.0.1',
                'port'          => 6379,
                'max_active'    => 3,
                'max_wait_time' => 5,
            ],
        ],
        'listen'        => [],
        'subscribe'     => [],
    ],
    'rpc'        => [
        'server' => [
            'enable'   => false,
            'port'     => 9000,
            'services' => [
            ],
        ],
        'client' => [
        ],
    ],
    'hot_update' => [
        'enable'  => env('APP_DEBUG', true),
        'name'    => ['*.php'],
        'include' => [app_path()],
        'exclude' => [],
    ],
    //连接池
    'pool'       => [
        'db'    => [
            'enable'        => true,
            'max_active'    => 3,
            'max_wait_time' => 5,
        ],
        'cache' => [
            'enable'        => true,
            'max_active'    => 3,
            'max_wait_time' => 5,
        ],
        //自定义连接池
    ],
    //队列
    'queue'      => [
        'enable'  => false,
        'workers' => [],
    ],
    'coroutine'  => [
        'enable' => true,
        'flags'  => SWOOLE_HOOK_ALL,
    ],
    'tables'     => [],
    //每个worker里需要预加载以共用的实例
    'concretes'  => [],
    //重置器
    'resetters'  => [],
    //每次请求前需要清空的实例
    'instances'  => [],
    //每次请求前需要重新执行的服务
    'services'   => [],
];

 可以在根目录下执行命令  php think swoole start  进行启动程序,如图下

php 安装 fileinfo 扩展,需要解除禁用的函数:putenv,proc_open

 

### ThinkPHP 6 Swoole 集成使用说明 #### 安装 Swoole 扩展 为了使 ThinkPHP 6 支持 Swoole,需通过 Composer 来安装 `topthink/think-swoole` 包。这一步骤确保了应用程序能够利用 Swoole 提供的强大功能来提升性能和效率[^2]。 ```bash composer require topthink/think-swoole ``` #### HTTP 并发性能测试对比 在 ThinkPHP 6 中,采用 Swoole 运行模式相较于传统的 PHP-FPM,在处理高并发请求方面表现出显著优势。具体表现在响应时间更短以及资源占用更低等方面。然而需要注意的是,实际效果会受到服务器配置等因素的影响,因此建议根据具体的业务场景来进行针对性优化[^1]。 #### 实现异步协程 借助于 Swoole 的协程特性,可以轻松实现高效的异步操作。下面是一个简单的例子展示了如何定义一个支持协程的方法: ```php <?php namespace app\controller; use think\swoole\Crontab; use Co; class AsyncController { public function asyncTask() { go(function () { $result = yield someCoroutineFunction(); echo "Result from coroutine: {$result}\n"; }); return 'Async task started'; } } ``` 此代码片段创建了一个新的协程并立即返回结果给客户端,而不会阻塞主线程等待子任务完成。这种方式非常适合用于执行耗时较长的任务,比如文件上传、邮件发送等。 #### RPC 调用示例 对于分布式系统的开发来说,RPC 是一种非常重要的通信方式之一。基于 ThinkPHP 6Swoole 可以快速搭建起高性能的微服务架构。这里给出一段基本的服务端逻辑作为参考: ```php <?php namespace app\controller; class RpcService { /** * @param array $params 参数列表 */ public function add(array $params){ // 处理传入的数据... return json(['status' => true, 'message' =>'success', 'data'=>array_sum($params)]); } } ``` 上述函数接收 JSON 编码后的数组形式参数,并计算其总和后反馈给调用方。这种设计使得跨进程间的信息交换变得异常简便高效[^3]。 #### WebSocket 应用实例 WebSocket 协议允许建立持久性的双向通讯通道,特别适合实时互动类应用的需求。以下是开启 Websocket 服务的一个典型做法: ```php <?php // config/swoole.php 设置项中启用 websocket 模式 return [ ... 'websocket' => true, ]; // 控制器内编写消息处理器 public function onMessage($server, $frame) { var_dump($frame->data); foreach ($this->wsConnections as $fd => $_connection) { if ($_connection !== $server && isset($_connection[$fd])) { $_connection->push("来自{$frame->fd}的消息:" . $frame->data); } } } ``` 这段程序实现了当接收到新消息时向所有已连接客户广播的功能。它不仅可用于聊天室这样的社交平台,也可以应用于在线教育直播课堂等多种场合[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值