thinkphp6如何使用swoole服务

安装thinkphp6

composer create-project topthink/think=6.0.x-dev tp

安装think-swoole的扩展库

composer require topthink/think-swoole

注:think-swoole安装很困难,需要先给PHP安装swoole扩展,然后删除PHP禁用的函数(具体那些禁用的函数需要删除,安装会报错,报错里有提示有删除那些禁用的函数),最后安装网速特别慢可能导致安装不上,建议在香港服务器上安装。

修改conflg文件夹下的swoole.php文件下的配置参数

['host']=>'0.0.0.0'
['port']=>'9502'//这是端口,可自行决定用哪个端口。

在swoole.php文件中引入文件

use app\websocket\privater\Handler;
use app\websocket\privater\Packet;

修改参数

'handler'       => Handler::class,
'parser'        => Parser::class,

Handler.php文件源码如下

<?php
namespace app\websocket\privater;

use Swoole\Server;
use Swoole\Websocket\Frame;
use Swoole\WebSocket\Server as WebsocketServer;
use think\Config;
use think\Request;
use think\swoole\contract\websocket\HandlerInterface;

//Handler全部返回false,将逻辑全部交给WebsocketEvent处理
class Handler implements HandlerInterface
{
    /** @var WebsocketServer */
    protected $server;

    /** @var Config */
    protected $config;


    public function __construct(Server $server, Config $config)
    {
        $this->server = $server;
        $this->config = $config;
    }

    /**
     * "onOpen" listener.
     *
     * @param int $fd
     * @param Request $request
     */
    public function onOpen($fd, Request $request)
    {
        //交给Connect监听处理
        return false;
    }

    /**
     * "onMessage" listener.
     *  only triggered when event handler not found/返回false触发监听,返回true直接完成
     *
     * @param Frame $frame
     * @return bool
     */
    public function onMessage(Frame $frame)
    {
        //返回false触发全局监听
        return false;
    }

    /**
     * "onClose" listener.
     *
     * @param int $fd
     * @param int $reactorId
     */
    public function onClose($fd, $reactorId)
    {
        return false;
    }
}

Parser.php文件源码如下

<?php
namespace app\websocket\privater;

use think\swoole\contract\websocket\ParserInterface;

class Parser implements ParserInterface
{

    /**
     * Encode output payload for websocket push.
     *
     * @param string $event
     * @param mixed $data
     *
     * @return mixed
     */
    public function encode(string $event, $data)
    {
        return json_encode(['event' => $event, 'data' => $data], 320);
    }

    /**
     * Decode message from websocket client.
     * Define and return payload here.
     *
     * @param \Swoole\Websocket\Frame $frame
     *
     * @return array
     */
    public function decode($frame)
    {
        $payload = Packet::getPayload($frame->data);
        return [
            'event' => $payload['event'] ?? null,
            'data' => $payload['data'] ?? null,
        ];
    }
}

1.Handler.php用于websocket事件的响应,如open/message等.必要文件

2.Parser .php用于消息体的解析,这里使用的格式为json,若换成其他通讯格式只要下对encode/decode编解码方法重写即可.必要文件

配置完成了

在项目根目录下执行以下命令启动swoole

php think swoole start

执行如下命令重启swoole

php think swoole restart

执行如下命令停止swoole

php think swoole stop

到这里,swoole的配置,启动,重新,停止。就写完了,具体的项目需求还需要你自己在Handler.php文件里修改项目需求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhiSiBuYu0517

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

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

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

打赏作者

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

抵扣说明:

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

余额充值