workman服务端开发模式-应用开发-后端api推送工具开发

一、安装workerman/gatewayclient

复制代码
composer require workerman/gatewayclient

二、工具集开发

在根目录下extend文件夹下创建文件夹并命名为Workman,在Woekman文件夹下创建推送工具并命名为GatewayWork.php,代码如下:

复制代码
<?php
/**
 * 长链接发送信息
 * User: 龙哥 三年风水
 * Date: 2024/12/21/0021
 * Time: 22:52
 */
namespace Workman;
use GatewayClient\Gateway;
class GatewayWork
{
    //向客户端发送内容
    public static function sendToClient($client_id, $data){
        //获取配置文件
        $isFormal = config('socket.is_formal');
        Gateway::$registerAddress = config("socket.tcp_address.{$isFormal}.address");
        Gateway::sendToClient($client_id, $data);
    }

    //向群推送数据
    public static function sendToGroup($group,$message){
        //获取配置文件
        $isFormal = config('socket.is_formal');
        Gateway::$registerAddress = config("socket.tcp_address.{$isFormal}.address");
        Gateway::sendToGroup($group,json_encode($message));
    }

    //批量向客户端发送内容
    public static function sendToAll($message, $client_id_array = null){
        //获取配置文件
        $isFormal = config('socket.is_formal');
        Gateway::$registerAddress = config("socket.tcp_address.{$isFormal}.address");
        Gateway::sendToAll(json_encode($message), $client_id_array);
    }

    //获取与 uid 绑定的 client_id 列表
    public static function getClientIdByUid($uid){
        //获取配置文件
        $isFormal = config('socket.is_formal');
        Gateway::$registerAddress = config("socket.tcp_address.{$isFormal}.address");
        return Gateway::getClientIdByUid($uid);
    }

    //关闭客户端
    public static function onClose($userId){
        //获取配置文件
        $isFormal = config('socket.is_formal');
        Gateway::$registerAddress = config("socket.tcp_address.{$isFormal}.address");
        $resUser = Gateway::isUidOnline((int)$userId);
        if($resUser == 1){
            $resClientUser = Gateway::getClientIdByUid((int)$userId);
            foreach ($resClientUser as $v){
                Gateway::sendToClient($v, json_encode(['type' => 'close','data' => 'ok']));
                Gateway::destoryClient($v);
            }
        }
    }
}

三、创建Gateway配置文件

在根目录下config文件夹下新建文件并命名为socket.php,代码如下:

复制代码
<?php
/**
 * 长链接配置文件
 * User: 龙哥 三年风水
 * Date: 2024/12/21/0021
 * Time: 22:56
 */
return array(
    'is_formal' =>  '1',//正式环境时修改为0,测试环境时修改为1 本地环境时修改为2
    'tcp_address' => [
        [
            'address'    =>  "172.30.7.98:1236"
        ],
        [
            'address'    =>  "172.20.36.144:1239"
        ],
        [
            'address'    =>  "0.0.0.0:1236"
        ]
    ]
);

四、提前说明

明天测试及优化,时间允许的情况下,开始前后端连调。

相关推荐
郑州光合科技余经理8 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼8 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
云边云科技_云网融合11 小时前
工业互联网组网方案全景解析:从低延迟网络到安全隔离的四大核心支柱
网络·安全·php
aixingpan16 小时前
aixingpan.cn API开发文档:api_docs_bichart_natalvssolararc2接口指南
前端·php
九皇叔叔18 小时前
从本地事务到分布式事务
java·分布式·分布式事务·cap·base
子非鱼a19 小时前
【WEB】WriteShell
php
刃神太酷啦21 小时前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
闲云野鹤在人间21 小时前
Docker入门|第3章 镜像详解
linux·网络·docker·容器·centos·云计算·php
sbjdhjd21 小时前
从兼容路由到任意方法调用:ThinkPHP 5.1.29 RCE 复现与调试复盘 | 06
经验分享·安全·网络安全·数据挖掘·开源·php·rce
JaguarJack21 小时前
PHP Trait 为何可能成为语言的关键特性
后端·php·服务端