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项目控制台中文乱码
