一、安装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"
]
]
);
四、提前说明
明天测试及优化,时间允许的情况下,开始前后端连调。