当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 接口
  • 结构体
  • 接口实现
  • 最后

前言

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

接口

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)
}

最后

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


http://www.mrgr.cn/news/41892.html

相关文章:

  • TypeScript 算法手册 【计数排序】
  • 在线JSON可视化工具--支持缩放
  • Redis入门第五步:Redis持久化
  • leetcode打卡001-约瑟夫问题
  • 栈数据结构:定义,基本操作与应用
  • 探索gmqtt:Python中的AI驱动MQTT库
  • Spring 的 IOC 和 AOP 是什么,有哪些优点?解密 Spring两大核心概念:IOC与AOP的魅力所在
  • LeetCode题练习与总结:丑数 Ⅱ--264
  • 【Java】—— 集合框架:Collection子接口:Set不同实现类的对比及使用(HashSet、LinkedHashSet、TreeSet)
  • 展示批量剪辑分割多个视频,助力轻松剪辑
  • 自研tauri‘2.0+vite5+elementPlus客户端exe聊天系统-源码版
  • YOLO11改进 | 卷积模块 | 添加选择性内核SKConv【附完整代码一键运行】
  • 征程6 工具链常用工具和 API 整理(含新手示例)
  • 动态规划
  • Macos终端常用的命令行指令总结
  • Nodejs多版本切换工具NVM
  • csdn加目录,标题
  • 主动配电网故障恢复的重构与孤岛划分模型——代码
  • 【艾思科蓝】Python数据分析与可视化实战:从入门到进阶
  • 【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}