thinkphp6 swoole websocket长连接使用
安装swoole扩展
composer require topthink/think-swoole
配置swoole 文件位置 config/swoole.php
<?php use thinkswoolewebsocketsocketioHandler; use thinkswoolewebsocketsocketioParser; 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 => [ applistenerWsClose::class ], swoole.webtsocket.Connect => [ applistenerWsConnect::class ], swoole.webtsocket.Test => [ applistenerWsTest::class, ], ], subscribe => [ ], ];
创建监听文件
php think make:listener WsTest
文件生成位置 app/listener/WsTask.php
<?php declare (strict_types = 1); namespace applistener; class WsTest { public function handle($event) { //发送消息 $ws->emit(callback,$list); return; } }
上一篇:
IDEA上Java项目控制台中文乱码