thinkphp6 swoole websocket长连接使用
·
安装swoole扩展
composer require topthink/think-swoole
配置swoole
文件位置 config/swoole.php
<?php
use think\swoole\websocket\socketio\Handler;
use think\swoole\websocket\socketio\Parser;
return [
'server' => [
'host' => env('SWOOLE_HOST', '127.0.0.1'), // 监听地址
'port' => env('SWOOLE_PORT', 80), // 监听端口
'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' => 40 * 1024 * 1024,
'buffer_output_size' => 20 * 1024 * 1024,
'socket_buffer_size' => 256 * 1024 * 1024,
'user' => 'nobody'
],
],
'websocket' => [
'enable' => true,
'handler' => Handler::class,
'parser' => Parser::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' => 5,
'max_wait_time' => 5,
],
],
'listen' => [],
'subscribe' => [],
],
'rpc' => [
'server' => [
'enable' => false,
'port' => 9000,
'services' => [
],
],
'client' => [
],
],
'hot_update' => [
'enable' => 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,
],
//自定义连接池
],
'coroutine' => [
'enable' => true,
'flags' => SWOOLE_HOOK_ALL,
],
'tables' => [],
//每个worker里需要预加载以共用的实例
'concretes' => [],
//重置器
'resetters' => [],
//每次请求前需要清空的实例
'instances' => [],
//每次请求前需要重新执行的服务
'services' => [],
];
监听事件
文件位置 app/event.php
<?php
// 事件定义文件
return [
'bind' => [
],
'listen' => [
'AppInit' => [],
'HttpRun' => [],
'HttpEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
'swoole.webtsocket.Close' => [
\app\listener\WsClose::class
],
'swoole.webtsocket.Connect' => [
\app\listener\WsConnect::class
],
'swoole.webtsocket.Test' => [
\app\listener\WsTest::class,
],
],
'subscribe' => [
],
];
创建监听文件
php think make:listener WsTest
文件生成位置 app/listener/WsTask.php
<?php
declare (strict_types = 1);
namespace app\listener;
class WsTest
{
public function handle($event)
{
//发送消息
$ws->emit('callback',$list);
return;
}
}
更多推荐
所有评论(0)