欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > workman服务端开发模式-应用开发-websockt应用配置

workman服务端开发模式-应用开发-websockt应用配置

2025/6/20 10:02:27 来源:https://blog.csdn.net/m0_63603104/article/details/144507184  浏览:    关键词:workman服务端开发模式-应用开发-websockt应用配置

一、配置文件开发

        在根目录下创建conf.ini文件并写入一下代码:

[redis]
host=172.30.7.95
port=6379
password=QXtr@@PxjoLenGon
token1=123
token2=121
[socket]
register_host=172.30.7.95
register_port=1239
register_name=SocketBusinessWorker
gateway_host=172.30.7.95
gateway_port=7575
gateway_count=2
gateway_name=SocketGateway
gateway_lanip=172.30.7.95
gateway_startport=5300

        redis.host 是Redis地址

        redis.port 是Redis端口

        redis.password 是Redis密码

        redis.token1与redis.token2 是Redis数据库号

        socket.register_host 是socket注册地址

        socket.register_port 是socket注册端口号

        socket.register_name 是socket注册名称

        socket.gateway_host 是gateway注册地址

        socket.gateway_port 是gateway注册端口

        socket.gateway_count 是gateway注册进程

        socket.gateway_name 是gateway注册名称

        socket.gateway_lanip 是gateway服务器的内网IP

        socket.gateway_startport 是gateway服务的开始端口号

二、修改register注册类

        1、工作原理

                Register类其实也是基于基础的Worker开发的。Gateway进程和BusinessWorker进程启动后分别向Register进程注册自己的通讯地址,Gateway进程和BusinessWorker通过Register进程得到通讯地址后,就可以建立起连接并通讯了。

        2、具体代码

<?php 
use \Workerman\Worker;
use \GatewayWorker\Register;
require_once __DIR__ . '/../../vendor/autoload.php';
// register服务必须是text协议,监听地址请用内网ip或者127.0.0.1
// 为了安全,register不能监听0.0.0.0,也就是register服务不能暴露给外网
$config = parse_ini_file('conf.ini', true);
$register = new Register("text://{$config['socket']['register_host']}:{$config['socket']['register_port']}");
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{Worker::runAll();
}

三、修改gateway进程类

        1、工作原理

                Gateway类用于初始化Gateway进程。Gateway进程是暴露给客户端的让其连接的进程。所有客户端的请求都是由Gateway接收然后分发给BusinessWorker处理,同样BusinessWorker也会将要发给客户端的响应通过Gateway转发出去。

                Gateway类是基于基础的Worker开发的。可以给Gateway对象的onWorkerStart、onWorkerStop、onConnect、onClose设置回调函数,但是无法给设置onMessage回调。Gateway的onMessage行为固定为将客户端数据转发给BusinessWorker。

        2、具体代码

<?php
use \Workerman\Worker;
use \GatewayWorker\Gateway;
use \Workerman\Autoloader;
require_once __DIR__ . '/../../vendor/autoload.php';
$config = parse_ini_file('conf.ini', true);
// gateway 进程
$gateway = new Gateway("Websocket://{$config['socket']['gateway_host']}:{$config['socket']['gateway_port']}");
// 设置名称,方便status时查看
$gateway->name = $config['socket']['gateway_name'];
// 设置进程数,一般两个进程就足够
$gateway->count = $config['socket']['gateway_count'];
// 分布式部署时请设置成内网ip(非127.0.0.1)
$gateway->lanIp = $config['socket']['gateway_lanip'];
// 内部通讯起始端口。假如$gateway->count=2,起始端口为2300
// 则一般会使用2300 2301 2个端口作为内部通讯端口
$gateway->startPort = $config['socket']['gateway_startport'];
// 心跳间隔
$gateway->pingInterval = 10;
// 心跳数据
$gateway->pingData = '{"type":"ping"}';
// 服务注册地址
$gateway->registerAddress = "{$config['socket']['register_host']}:{$config['socket']['register_port']}";
/* 
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{$connection->onWebSocketConnect = function($connection , $http_header){// 可以在这里判断连接来源是否合法,不合法就关掉连接// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接if($_SERVER['HTTP_ORIGIN'] != 'http://chat.workerman.net'){$connection->close();}// onWebSocketConnect 里面$_GET $_SERVER是可用的// var_dump($_GET, $_SERVER);};
}; 
*/// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{Worker::runAll();
}

四、修改businessworker业务进程类

        1、工作原理

                BusinessWorker类其实也是基于基础的Worker开发的。BusinessWorker是运行业务逻辑的进程,BusinessWorker收到Gateway转发来的事件及请求时会默认调用Events.php中的onConnect onMessage onClose方法处理事件及数据,开发者正是通过实现这些回调控制业务及流程。

        2、具体代码

<?php
use \Workerman\Worker;
use \GatewayWorker\BusinessWorker;
require_once __DIR__ . '/../../vendor/autoload.php';
$config = parse_ini_file('conf.ini', true);
// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = $config['socket']['register_name'];
// bussinessWorker进程数量
$worker->count = 4;
// 服务注册地址
$worker->registerAddress = "{$config['socket']['register_host']}:{$config['socket']['register_port']}";// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{Worker::runAll();
}

五、提前说明

        明天将开发最基本的业务逻辑,首先是安全,其次是应用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词