thinkphp8.0\swoole的websocket应用

环境: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.mzph.cn/news/899291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu服务器挂载时遇到文件系统错误怎么办

在Ubuntu服务器上挂载分区时&#xff0c;如果遇到文件系统错误&#xff0c;通常可能是由于磁盘损坏、文件系统损坏、不正确的卸载等原因造成的。以下是详细的排查与修复步骤&#xff1a; 一、查看错误信息 首先&#xff0c;尝试手动挂载并观察具体错误&#xff1a; sudo mount …

【设计模式】策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;详解 一、策略模式的定义 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一组算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以相互替换&#xff0c;从而让算法的…

软考笔记5——软件工程基础知识

第五章节——软件工程基础知识 软件工程基础知识 第五章节——软件工程基础知识一、软件工程概述1. 计算机软件2. 软件工程基本原理3. 软件生命周期4. 软件过程 二、软件过程模型1. 瀑布模型2. 增量模型3. 演化模型&#xff08;原型模型、螺旋模型)4. 喷泉模型5. 基于构建的开发…

Vim 实用指南

导航 简介Vim 的来历Vim 语言 Vim 的三种模式Normal&#xff08;普通模式&#xff09;Insert&#xff08;插入模式&#xff09;Visual&#xff08;可视模式&#xff09;三种模式转换 普通模式实用技巧说明复制当前行并粘贴使用上一个命令撤销上一个操作最常用的跳转命令查找对应…

Git入门——常用指令汇总

以下是一份精心整理的 Git常用指令速查表&#xff0c;基本覆盖日常开发使用场景&#xff0c;建议收藏备用&#x1f447; &#x1f527; 环境配置 指令作用git config --global user.name "你的名字"设置全局用户名git config --global user.email "你的邮箱&qu…

常见中间件漏洞攻略-Jboss篇

一、CVE-2015-7501-Jboss JMXInvokerServlet 反序列化漏洞 第一步&#xff1a;开启靶场 第二步&#xff1a;访问该接口&#xff0c;发现直接下载&#xff0c;说明接⼝开放&#xff0c;此接⼝存在反序列化漏洞 http://47.103.81.25:8080/invoker/JMXInvokerServlet 第三步&…

播放本地视频-实现视频画廊功能

实现一个视频画廊&#xff0c;播放本地视频 可以切换不同视频的功能 文章目录 需求&#xff1a;场景实现方案遇到的坑播放器选择界面显示不全视频友好显示问题缓存 总结 需求&#xff1a; 实现一个视频画廊&#xff0c;播放本地视频 可以切换不同视频的功能 场景 图片画廊的…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…

为什么后端接口返回数字类型1.00前端会取到1?

这得从axios中得默认值说起&#xff1a; Axios 的 transformResponse axios 在接收到服务器的响应后&#xff0c;会通过一系列的转换函数&#xff08;transformResponse&#xff09;来处理响应数据&#xff0c;使其适合在应用程序中使用。默认情况下&#xff0c;axios 的 tran…

【C++游戏引擎开发】《线性代数》(2):矩阵加减法与SIMD集成

一、矩阵加减法数学原理 1.1 定义 ​逐元素操作:运算仅针对相同位置的元素,不涉及矩阵乘法或行列变换。​交换律与结合律: 加法满足交换律(A + B = B + A)和结合律( ( A + B ) + C = A + ( B + C ) )。 ​减法不满足交换律(A − B ≠ B − A)。1.2 公式 ​ C i j = …

openGauss关联列数据类型不一致引起谓词传递失败

今天分享一个比较有意思的案例 注意&#xff1a;因为原始SQL很长&#xff0c;为了方便排版&#xff0c;简化了SQL 下面SQL跑60秒才出结果&#xff0c;客户请求优化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…

01 相机标定与相机模型介绍

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +

Hyperlane:Rust Web开发的未来,释放极致性能与简洁之美

Hyperlane&#xff1a;Rust Web开发的未来&#xff0c;释放极致性能与简洁之美 你是否厌倦了复杂的Web框架&#xff0c;想要一个既高效又易用的工具来构建现代Web应用&#xff1f;Hyperlane正是你需要的答案&#xff01;作为专为Rust打造的轻量级、高性能HTTP服务器库&#xf…

STM32学习笔记之振荡器(原理篇)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择

在人工智能视觉技术快速发展的今天&#xff0c;其应用场景正在持续拓宽&#xff0c;从智能安防到工业自动化&#xff0c;从机器人技术到智能交通&#xff0c;各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini&#xff0c;正是一款专为满足这些多样化…

K8S学习之基础五十九:部署gitlab服务

部署gitlab docker pull gitlab/gitlab-ce:latest docker tag gitlab/gitlab-ce:latest 172.16.80.140/gitlab/gitlab-ce:latest docker push 172.16.80.140/gitlab/gitlab-ce:latest docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/…

多线程 --- 多线程编程

在写代码的时候&#xff0c;可以使用多进程进行并发编程&#xff08;在Java中&#xff0c;不太推荐&#xff0c;很多很多关于进程相关的API&#xff0c;在Java标准库中&#xff0c;都没有提供&#xff09;&#xff0c;也可以使用多线程进行并发编程&#xff08;系统提供了多线程…

HTML~视频音频在网页中不能自动播放

问题&#xff1a; autoplay是打开自动播放&#xff0c;但是发现加了关键词还是没有反应 原因&#xff1a; 现在浏览器禁止自动播放&#xff08;特别是带声音的&#xff09; 解决办法&#xff1a; 可以添加muted 进行没有声音的自动播放

vue中上传接口file表单提交二进制文件流

1.使用elementui上传组件 要做一个选择文件后&#xff0c;先不上传&#xff0c;等最后点击确定后&#xff0c;把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件&#xff0c;设置auto-uploadfalse&#xff0c;也就是选择文件后不立刻上传。 <el-uplo…

Flutter环境配置

配置环境变量 PUB_HOSTED_URLhttps://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 这个命令是用来配置 Flutter 的镜像源地址&#xff0c;主要是为了解决在中国大陆地区访问 Flutter 官方资源较慢的问题。 具体的操作如下&#xff1a; 右键点…