首页 > 其他分享 >workman服务端开发模式-应用开发-websockt应用配置

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

时间:2024-12-17 16:01:49浏览次数:12  
标签:socket workman register gateway Gateway 进程 config 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();
}

五、提前说明

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

标签:socket,workman,register,gateway,Gateway,进程,config,websockt,服务端
From: https://blog.csdn.net/m0_63603104/article/details/144507184

相关文章

  • Fleck:一个轻量级的C#开源WebSocket服务端库
    推荐一个简单易用、轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发。01项目简介Fleck是一个用C#编写的轻量级WebSocket服务器库。它提供了一个简单而直观的API,使得开发者可以轻松地在他们的应用程序中集成WebSocket功能,比如一些常见的实时通信应用,在......
  • 基于深度学习CNN网络 mini-xception网络实现 构建一个完整的人脸表情检测_识别分类系
    人脸表情检测该项目已训练好网络模型,配置好环境即可运行使用,效果见图像,实现图像识别、摄像头识别、摄像头识别/识别分类项目-说明文档-UI界面-cnn网络项目基本介绍:【网络】深度学习CNN网络mini-xception网络【环境】python>=3.5tensorflow2opencvpyqt5【文件】训......
  • 使用YOLOv8网络构建一个完整垃圾检测识别系统,如何实现——垃圾检测识别_垃圾分类系统_
    垃圾检测识别/垃圾分类系统/垃圾识别-cnn网络-带UI界面该项目已训练好网络模型,配置好环境即可直接运行使用,运行效果见图像项目基本介绍:【网络】深度学习CNN网络yolo8网络【环境】python>=3.5ptorchopencvpyqt5【文件】训练预测全部源代码、训练好的模型,项目报告文......
  • React服务端渲染框架Next.js入门教程
    React服务端渲染框架Next.js入门教程https://www.bilibili.com/video/BV13441117KK*101节_Next.js简介和手动创建项目02节_creat-next-app快速创建项目03节_Next.js的Page和Conponent使用04节_路由的标签跳转和编程跳转05节_路由跳使用query传递参数和接受参数06节_路由......
  • 群控系统服务端开发模式-应用开发-获取登录者今天操作日志
    一、后端api开放路由    在根目录下route文件夹下app.php文件中,在perimission的group中添加如下代码:Route::get('member/personal_log','permission.Member/personalLog');//获取个人信息操作接口二、后端api添加方法    在根目录下app文件夹下controlle......
  • Windows系统基础(三):服务端口指南
    服务端口文章目录服务端口一、WEB服务端口二、网络服务端口三、邮件服务端口四、远程服务端口五、其它服务端口总结一、WEB服务端口80(HTTP):HTTP是网站的默认端口,用于明文传输网页内容。虽然速度快,但缺乏加密保护,容易被中间人攻击。443(HTTPS):HTTPS是基于S......
  • C# HTTP实现断点续传客户端和服务端
    一、开篇描述本篇博客所描述的断点续传功能是基于c#语言,服务器端采用.net mvc框架,客户端采用winform框架。本篇博客实现断点续传功能的基本思路:1)服务器端是把接收到的文件流,追加到已有的文件;2)客户端是把文件流截段上传;其实,任何一种计算机语言基于这个思路(web客户端JavaScript......
  • C#创建WebSocket服务端
    使用C#创建WebSocket服务端的方法1.引入必要的命名空间usingSystem.Text;//用于发送和接收信息时处理文本usingSystem.Net;//用于处理网络连接usingSystem.Net.WebSockets;//用于处理WebSocket连接2.实例化HttpListenerconststringHOST="localhost";......
  • 前端如何保持与服务器时间同步(如何解决客户端与服务端时间不对称的问题)?
    前端与服务器时间同步,是为了解决客户端与服务端时间不对称的问题,避免因此导致的逻辑错误或显示错误。以下是一些常见的解决方案,以及它们的优缺点:1.通过API获取服务器时间戳:方法:前端通过AJAX或Fetch等方式请求服务器的一个API接口,该接口返回服务器的当前时间戳。前......
  • JAVA实现客户端通过服务端对话(NET)
    通过使用java.net实现客户端向服务端发送信息内容以及发送目标地址ID,服务端通过寻找对应ID转发给目标客户端。代码仅供参考,其中有很多地方仍需要优化,比如:ID无法注册、没有添加密码、代码优化不够等问题java版本:17服务端代码:importjava.io.IOException;importjava.io.Pri......