thinkphp8.0\swoole的websocket应用

news/2025/4/1 4:31:42/

环境:centOS7.9、php8.3、thinkphp8.0\think-swoole4.1

我用的官方think-swoole插件

第一步:根据官方文档,需要安装此扩展插件

composer require topthink/think-swoole

第二步:在根目录下config文件夹下编辑swoole.php配置文件

    'http'=> ['enable'     => true,'host'       => '0.0.0.0', // 任意ip都可以访问http服务;'port'       => 8080, // 宝塔和阿里云、腾讯云的安全组需要开放此端口;'worker_num' => swoole_cpu_num(),'options'    => ['daemonize' =>  true], // 守护进程运行],'websocket'  => ['enable'        => true, // 默认为false, 一定要开启'route' => false,  // 最大的坑,在做测试时,一定要关闭,否则调试不出结果;'handler'       => \think\swoole\websocket\Handler::class,'ping_interval' => 25000,'ping_timeout'  => 60000,'room'          => ['type'  => 'table','table' => ['room_rows'   => 8192,'room_size'   => 2048,'client_rows' => 4096,'client_size' => 2048,],'redis' => ['host'          => '127.0.0.1','port'          => 6379,'max_active'    => 3,'max_wait_time' => 5,],],'listen'        => ['event' => \app\index\listener\WebsocketTest::class,//事件监听'close' => 'app\index\listener\WsClose',//关闭事件],'subscribe'     => [],],

第三步:我的框架是多应用模式,我创建了index应用;

// WebsocketTest.php; 路径: app\index\listener
namespace app\index\listener;
use think\Container;
use think\swoole\Websocket;class WebsocketTest
{public $websocket = null;public function __construct(Container  $container){$this->websocket = $container->make(Websocket::class);}/*** 事件监听处理* @param $event*/public function handle($event){echo '接收到事件,' . $event->type . '---' . $event->data;echo '--------';var_dump($event);$func = $event->type;$this->$func($event);}/*** 测试类型* @param $event*/public function test($event){$msg = json_encode($event->data,256);$this->websocket->emit('callback', $msg);}
}

第四步:websocket关闭事件

namespace app\index\listener;class WsClose
{/*** 事件监听处理** @return mixed*/public function handle($event){//echo '已经断开了';}
}

第五步:前端index.html

<html>
<head>
<title>websocket</title>
</head><body>
<h1>websocket功能</h1><input id="msg" type="text"/>
<button onclick="send()">发送</button><script>var ws = new WebSocket("ws://你的ip:8080");ws.onopen = function (){console.log("连接成功");var sendObj = {};sendObj.type = 'connect';sendObj.data = 'connect success';console.log('msg',JSON.stringify(sendObj));ws.send(JSON.stringify(sendObj));}ws.onclose = function () {console.log("连接失败")}ws.onmessage = function (evt) {console.log("数据已接收",evt);}function send(){console.log('运行到这里了');var msg = document.getElementById('msg').value;var sendObj = {};sendObj.type = 'mtest';sendObj.data = msg;console.log('msg',JSON.stringify(sendObj));ws.send(JSON.stringify(sendObj));}
</script>
</body>
</html>


http://www.ppmy.cn/news/1583200.html

相关文章

适合各个层次的 7 个计算机视觉项目【1】:植物病害检测

植物病害检测 植物病害检测是计算机视觉在农业领域的一个重要应用。您将学习如何加载、处理和扩充数据集&#xff0c;构建深度神经网络模型&#xff0c;并在数据集上训练模型。该项目有助于理解图像分类&#xff0c;并通过实现早期病害检测为可持续农业做出贡献。 import os…

清晰易懂的 C++ 开发环境搭建教程

一、安装 C 编译器&#xff08;三大平台全覆盖&#xff09; 1. Windows 系统 方案一&#xff1a;MinGW-w64&#xff08;轻量推荐&#xff09; 下载 MinGW-w64&#xff1a; 访问 MinGW-w64 官网 → 下载 mingw-w64-install.exe。 安装配置&#xff1a; 架构选择&#xff1a;x…

form 表单内容序列化成一个字符串

html <form id"form1" action"http://localhost:8080/xxx" method"post"> <p >关键字1&#xff1a; <input type "text" name"keyword1" /></p> <p >关键字2&#xff1a; <input t…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…

Android adb自身调试log开关

本文介绍下如何打开adb源码中的debug log 1.adb源码log是可以动态打开和关闭的&#xff0c;控制逻辑代码如下 static NoDestructor<std::mutex> log_mutex; static NoDestructor<CachedProperty> log_property GUARDED_BY(log_mutex)("debug.adbd.logging&q…

高校校园交友微信小程序的设计与实现【lw+源码+部署+讲解】

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;ssm 前端技术&#xff1a;JavaScript、Vue 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JDK版本&#…

Day28-代码随想录-平衡二叉树110+二叉树的所有路径257

平衡二叉树题目如下&#xff1a; 平衡二叉树的定义是左右子树的高度差不能大于1。看到这种类型的题&#xff0c;一般会想到用递归的方法来做&#xff0c;一旦用递归&#xff0c;就需要明确递归的三部曲。&#xff08;1&#xff09;递归函数的输入和返回值&#xff1a;输入-当前…