Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)life

发布时间:2024-11-24 07:20

案例六:案例分析:如何在项目汇报中展示成果并获取反馈。 #生活技巧# #职场沟通技巧# #职场沟通案例分析#

最新推荐文章于 2024-08-15 10:50:18 发布

程序员的生活1 于 2020-07-31 16:57:54 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

我的官方群点击此处。获取更多的swoole学习资料以及视频源码笔记。

需求分析

我们假设有一个需求,我在后端点击按钮 1,首页弹出 “后端触发了按钮 1”。后端点了按钮 2,列表页弹出 “后端触发了按钮 2”。做到根据不同场景推送到不同页面。

代码思路


Swoole fd
客户端浏览器打开或者刷新界面,在 swoole 服务会生成一个进程句柄 fd ,每次浏览器页面有打开链接 websocket 的 js 代码,便会生成,每次刷新的时候,会关闭之前打开的 fd,重新生成一个新的,关闭界面的时候会生成一个新的。swoole 的 fd 生成规则是从 1 开始递增。
Redis Hash 存储 fd
我们建立一个 key 为 swoole:fds redis 哈希类型数据,fd 为 hash 的字段,每个字段的值我们存储前端 websocket 请求的 url 参数信息 (根据业务复杂度自己灵活变通,我在项目中会在 url 带上 sessionId)。每次链接打开 swoole 服务的时候我们存储其信息,每次关闭页面时候我们清除其字段。在 redis 存储如下


触发分场景推送
在界面上当进行了触发操作的时候,通过后台 curl 请求 swoole http 服务,swoole http 服务根据你向我传递的参数分发给对应的逻辑处理。如 curl 请求 127.0.0.1:9502page=back&func=pushHomeLogic&token=123456 我们可以根据传入的 func 参数,在后台分发给对应逻辑处理。如分发给 pushHomeLogic 方法。在其里面实现自己的逻辑。为防止过多的 ifelse 以及 foreach 操作,我们采用的是闭包,call_user_func 等方法实现如下

public function onRequest($request,$response)

{

if ($this->checkAccess("", $request)) {

$param = $request->get;

if (isset($param['func'])) {

if (method_exists($this,$param['func'])) {

call_user_func([$this,$param['func']],$request);

}

}

}

}

public function pushHomeLogic($request)

{

$callback = function (array $aContent,int $fd,SwooleDemo $oSwoole)use($request) {

if ($aContent && $aContent['page'] == "home") {

$aRes['message'] = "后端按了按钮1";

$aRes['code'] = "200";

$oSwoole::$server->push($fd,xss_json($aRes));

}

};

$this->eachFdLogic($callback);

}

完整代码

swool 脚本代码逻辑

<?php

namespace App\Console\Commands;

use Closure;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Redis;

class SwooleDemo extends Command

{

protected $signature = 'swoole:demo';

protected $description = '这是关于swoole websocket的一个测试demo';

private static $server = null;

public function __construct()

{

parent::__construct();

}

public function handle()

{

$this->redis = Redis::connection('websocket');

$server = self::getWebSocketServer();

$server->on('open',[$this,'onOpen']);

$server->on('message', [$this, 'onMessage']);

$server->on('close', [$this, 'onClose']);

$server-&g

网址:Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)life https://www.yuejiaxmz.com/news/view/229939

相关内容

完整开发实现公众号主动消息推送,精彩内容即刻到达
Harmony鸿蒙实战开发项目
地产项目老带新的10大经典案例!太实战太有用了
厂商消息分类使用指南
App 消息推送
华为终端发力“1+8+N”全场景智慧生活战略
智能全屋家居系统蓄势待发|《2025中国高端智能家居生活场景白皮书》重磅发布
机器学习算法应用场景实例六十则
推送消息&推送机制(推送机制如何规划设置)
如何配置移动应用服务和开发推送功能

随便看看