安装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文件里修改项目需求。
版权声明:本文为weixin_46704937原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。