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

文章目录

前言

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

接口

trait/task_mgr.go

go 复制代码
type TaskMgr interface {
	RouterGroup

	Start()
	StartWorker(taskQueue chan Request)
	Submit(request Request)
}

结构体

gcore/task_mgr.go

go 复制代码
// TaskMgr 任务管理器
type TaskMgr struct {
	trait.RouterGroup

	taskQueues []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

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

最后

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

相关推荐
Yeauty25 分钟前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
苏三说技术32 分钟前
为什么越来越多人使用FastAPI?
后端
听风34743 分钟前
Arch Linux 软件安装完全指南
linux·运维·archlinux·pacman
老孙讲技术1 小时前
业主半夜想看楼道监控,物业却说「去机房」?我用设备托管+轻应用,把小区摄像头嵌进了社区小程序
后端·物联网
geovindu1 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
二月龙1 小时前
什么是事务四大特性?用业务案例通俗讲透 ACID
后端
韩楚风1 小时前
【参天引擎】一次宕机后的数据恢复,让我把 Cantian 持久化与恢复的六大机制全搞明白了
服务器·网络·数据库·分布式·mysql·架构·cantian
Slice_cy1 小时前
Mint 自研框架设计与实现:从重复开发走向配置驱动(五)
前端·后端·架构
景同学1 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
库克克2 小时前
【C++】set 与multiset
开发语言·c++