Go语言实现长连接并发框架 - 任务管理器

news/2024/12/21 22:33:05/

文章目录

  • 前言
  • 接口
  • 结构体
  • 接口实现
  • 项目地址
  • 最后

前言

你好,我是醉墨居士,我们上篇博客实现了路由分组的功能,接下来这篇博客我们将要实现任务管理模块

接口

trait/task_mgr.go

type TaskMgr interface {RouterGroupStart()StartWorker(taskQueue chan Request)Submit(request Request)
}

结构体

gcore/task_mgr.go

// TaskMgr 任务管理器
type TaskMgr struct {trait.RouterGrouptaskQueues []chan trait.Request
}// NewTaskMgr 创建任务管理器
func NewTaskMgr() trait.TaskMgr {taskQueues := make([]chan trait.Request, global.Config.TaskQueues)for i := 0; i < len(taskQueues); i++ {taskQueues[i] = make(chan trait.Request, global.Config.TaskQueueLen)}// 新建任务处理路由器与分组路由router := NewRouter()routerGroup := NewRouterGroup(router)return &TaskMgr{RouterGroup: routerGroup,taskQueues: taskQueues,}
}

接口实现

gcore/task_mgr.go

// Start 启动任务管理器
func (m *TaskMgr) Start() {for i := 0; i < len(m.taskQueues); i++ {for j := 0; j < global.Config.WorkersPerTaskQueue; j++ {go m.StartWorker(m.taskQueues[i])}}
}// StartWorker 启动任务消费者
func (m *TaskMgr) StartWorker(taskQueue chan trait.Request) {for request := range taskQueue {flow := m.TaskFlow(request.ID())ctx := NewContext(request, flow)ctx.Next()}
}// Submit 提交任务
func (m *TaskMgr) Submit(request trait.Request) {m.taskQueues[int(request.ConnID()) % len(m.taskQueues)] <- request
}// Use 注册插件
func (m *TaskMgr) Use(flow ...trait.TaskFunc) {m.RouterGroup.Use(flow...)
}// Regist 注册任务流
func (m *TaskMgr) Regist(id uint16, flow ...trait.TaskFunc) {m.RouterGroup.Regist(id, flow...)
}// Regist 注册任务流
func (m *TaskMgr) RegistFlow(id uint16, flow trait.TaskFlow) {m.RouterGroup.RegistFlow(id, flow)
}

项目地址

Github:https://github.com/zm50/gte
Giee:https://gitee.com/zm50/gte

最后

我是醉墨居士,我们完成了基本的任务管理器的开发,希望对你有所帮助,也希望你有所收获


http://www.ppmy.cn/news/1536876.html

相关文章

循环神经网络-LSTM网络

文章目录 前言一、LSTM网络简介二、LSTM的门结构1.遗忘门2.输入门3.输出门 三、总结 前言 循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNN&#xff09;是一种特殊的神经网络&#xff0c;具有能够处理序列数据的能力&#xff0c;然而&#xff0c;RNN在处理…

数值分析作业(第二章):代码+手写计算

《数值计算方法》丁丽娟-数值实验作业-第二章&#xff08;MATLAB&#xff09; 作业P58: 1 &#xff0c;2&#xff0c;3&#xff0c;6&#xff0c;8(1), 12, 13 数值实验P61: 2, 3 数值实验&#xff08;第二章&#xff09; 代码仓库&#xff1a;https://github.com/sylvanding/b…

信息安全工程师(42)VPN类型和实现技术

前言 VPN&#xff08;Virtual Private Network&#xff0c;虚拟专用网络&#xff09;是一种在公共网络上建立专用网络连接的技术。 一、VPN类型 VPN可以根据不同的分类标准划分为多种类型&#xff0c;主要包括以下几种&#xff1a; 按协议分类&#xff1a; PPTP&#xff08;Poi…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

国庆作业

day1 1.开发环境 Linux系统GCCFDBmakefilesqlite3 2.功能描述 项目功能: 服务器&#xff1a;处理客户端的请求&#xff0c;并将数据存入数据库中&#xff0c;客户端请求的数据从数据库进行获取&#xff0c;服务器转发给客户端。 用户客户端&#xff1a;实现账号的注册、登…

php与python建站的区别有哪些

php与Python建站的区别&#xff1a; 1、语言层面Python的特性比php好&#xff0c;更加规范。 2、Python的性能比php高。 3、有只需要启动服务的时候执行一次的代码&#xff0c;在php里每个请求都会被执行一次&#xff0c;Python不需要。虽然php可以通过缓存缩短这方面的差距…

【命令操作】linux上watch命令详解 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】linux上basename和dirname使用详解 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于Linux上watch命令的详解文章。watch命令是Linux系统中非常有用的一个工具&#xff0c;它可以定期执行指定的命令并在终端…

一文了解:LLM Dropout

咱们来聊聊&#xff0c;啥样的预测模型才算是好模型&#xff1f;简单来说&#xff0c;就是那种在处理它从没见过的数据时&#xff0c;也能表现得特别棒的模型。老派的泛化理论告诉我们&#xff0c;要想让模型在训练集和测试集上都表现差不多&#xff0c;就得让模型简单点。这个…