当前位置: 首页 > news >正文

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>

相关文章:

  • MySQL: 创建两个关联的表,用联表sql创建一个新表
  • 电机控制常见面试问题(十八)
  • vulntarget_a 训练笔记
  • 人工智能赋能:生成式游戏的未来趋势
  • 响应式 Web 设计:HTML 与 CSS 协同学习的进度(二)
  • 2025-03-24 学习记录--C/C++-PTA 习题7-7 字符串替换
  • 预测蓝桥杯16届嵌入式省赛客观题
  • 【进阶编程】Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt 和 Tauri 的详细对比
  • CPP中的numeric库中的accumulate求和函数说明
  • Python----计算机视觉处理(Opencv:绘制图像轮廓:寻找轮廓,findContours()函数)
  • 深入剖析ReLU激活函数:特性、优势与梯度消失问题的解决之道,以及Leaky ReLU 和 Parametric ReLU
  • Python和json
  • PTA 1105-链表合并(C++)
  • 大模型的后训练(post-training)方法
  • 【区块链通用服务平台及组件】绿信链 | FISCO BCOS 应用案例
  • 分布式环境下的重复请求防护:非Redis锁替代方案全解析
  • 智能汽车图像及视频处理方案,支持视频智能包装能力
  • ARCGIS PRO DSK 栅格数据(Raster)
  • sql优化,如何进行索引优化
  • 卷积神经网络 - LeNet-5
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 人社部:就业政策储备充足,将会根据形势变化及时推出
  • 民调显示特朗普执政百日支持率为80年来美历任总统最低
  • 广州一季度GDP为7532.51亿元,同比增长3%
  • 报告:到2030年我国无人机产业将率先实现万亿规模
  • 马上评丨发钱奖励结婚,支持婚育就该系统性发力