文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Laravel 使用swoole 搭建 websocket 链接

2023-08-31 21:19

关注

方案一  composer 安装配置安装 LaravelS 扩展包:

composer require hhxsv5/laravel-s

Laravel 5.5 以上版本可用,无需手动在 config/app.php 配置文件中注册,运行Artisan 命令相应脚本和配置文件发布到根目录下

php artisan laravels publish

该命令会发布配置文件 laravels.php 到 config 目录下,以及脚本文件到 bin 目录下

你可以在配置文件中对 Swoole 进行一些基本配置,而脚本文件主要用于管理 Swoole 服务的启动、重载、关闭等操作。

启动LaravelS

//命令启动 LaravelS php bin/laravels start 

这样,Swoole 服务就被启动起来,监听本地的 5200 端口,如果有请求发送到这个端口,它就可以进行处理。

此外 php bin/laravels 还支持其它命令对 LaravelS 进行管理:

方案二   pecl 命令安装需要先安装pecl

  php swoole 扩展安装

pecl install swoole

修改 php.ini 配置文件

extension=swoole.so

重启 php-fpm 不同系统命令不同

sudo service php-fpm start      # 启动php-fpm

查看 swoole 扩展装好了

php -m

安装 laraveltw/laravel-swoole

在项目根目录下使用 composer安装

composer require swooletw/laravel-swoole -vvv 

最好加上 -vvv 参数,因为安装很慢,会给人一种没有安装被卡主的感觉。最好别再本地执行或者在 PHPstorm 中执行。因为 windows 不支持 laravel-swoole, 会有各种问题。可以在虚拟机的项目根目录下执行安装时需要耐心。当在 composer.josn 中看到下图标识的表示安装成功

Swoole安装好以后就是写服务器端的代码,可以自己写php文件websocket.php

代码如下:

connect('127.0.0.1', 6379); $ws_server->on('open', function ($ws, $request) use ($redis) {    $redis->sAdd('id', $request->fd);    $mes = '用户:'.$request->fd.'已加入聊天室';    $redis->sAdd('mes', $mes);    pushAll($redis,$ws,$mes);    getAllMes($redis,$ws);}); $ws_server->on('message', function ($ws, $frame) use ($redis) {    $mes = '用户:'.$frame->fd.'
'.$frame->data; pushAll($redis,$ws,$mes);}); //监听WebSocket连接关闭事件$ws_server->on('close', function ($ws, $fd) use ($redis) { $redis->srem('key:'.$id,$fd); $mes = '用户:'.$fd.'已退出聊天室'; $redis->sAdd('mes', $mes); pushAll($redis,$ws,$mes);}); $ws_server->start(); function getAllMes($redis,$ws){ $mesLists = $redis->sMembers('mes'); foreach ($mesLists as $mes){ pushAll($redis,$ws,$mes); }}function pushAll($redis,$ws,$mes){ $fds = $redis->sMembers('id'); foreach ($fds as $fd){ if($ws->exist($fd)){ $ws->push($fd,$mes); } }}

然后linux运行

php webcoket.php

以上是一种方法,还可以写一个自动加载的方法例如

使用 laravel 自带的方法 artisan

php artisan make:command Swoole

会在 app\Console\Command\ 目录下生成 Swoole 文件

argument('action');        switch ($action) { //方法可以自己写调用            case 'close':                break;            default:                $this->start();                break;        }    }    public function start()    {        // 这里是监听的服务端口号        $this->ws = new swoole_websocket_server("0.0.0.0", 9500);        //监听WebSocket连接打开事件        $this->ws->on('open', function ($ws, $request) {             $this->ws->push($request->fd, "is ok\n"); //链接服务器成功返回提示        });        //监听WebSocket消息事件        $this->ws->on('message', function ($ws, $frame) {            $this->info("client is SendMessage\n" . $frame);        });        //监听WebSocket主动推送消息事件        $this->ws->on('request', function ($request, $response) {            $scene = $request->post['scene'];            foreach ($this->ws->connections as $fd) {                if ($this->ws->isEstablished($fd)) {                    $this->ws->push($fd, $scene);                }            }        });        //监听WebSocket连接关闭事件        $this->ws->on('close', function ($ws, $fd) {            $this->info("client is close\n");        });        $this->ws->start();    }}

在 Kernel.php 文件中注册这个 Swoole 类

load(__DIR__.'/Commands');        require base_path('routes/console.php');    }}

在虚拟机的根目录下执行

 php artisan swoole start

就会开启一个长起进程到这里服务器和后端代码完成现在需要一个前端页来实现长链接

前端代码很简单

    测试WebSocket    

来源地址:https://blog.csdn.net/weixin_43695488/article/details/126134521

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯