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

Go语言实现长连接并发框架 - 任务执行流

文章目录

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

前言

你好,我是醉墨居士,上篇博客中我们实现了客户端的请求的实现,接下来我们要去实现对请求任务的处理,我们需要定义任务执行的流程

接口

trait/task.go

type TaskFunc interface {
	Execute(ctx Context)
}

type TaskFlow interface {
	Extend(...TaskFunc)
	Append(fs ...TaskFunc) TaskFlow
	Execute(idx int, ctx Context)
	Len() int
	Funcs() []TaskFunc
}

结构体

gcore/task.go

// TaskFunc 任务处理函数
type TaskFunc func(trait.Context)

// TaskFlow 任务处理流
type TaskFlow []trait.TaskFunc

// NewTaskFlow 创建任务流
func NewTaskFlow(fs ...trait.TaskFunc) trait.TaskFlow {
	flow := TaskFlow(fs)
	return &flow
}

接口实现

gcore/task.go

// Execute 执行任务
func (h TaskFunc) Execute(ctx trait.Context) {
	h(ctx)
}

// Extend 扩展任务处理流
func (h *TaskFlow) Extend(fs ...trait.TaskFunc) {
	*h = append(*h, fs...)
}

// Append 追加任务处理流
func (h *TaskFlow) Append(fs ...trait.TaskFunc) trait.TaskFlow {
	flow := make([]trait.TaskFunc, h.Len() + len(fs))
	copy(flow[:h.Len()], *h)
	copy(flow[h.Len():], fs)

	return NewTaskFlow(flow...)
}

// Execute 执行任务
func (h *TaskFlow) Execute(idx int, ctx trait.Context) {
	(*h)[idx].Execute(ctx)
}

// Len 任务处理流长度
func (h *TaskFlow) Len() int {
	return len(*h)
}

// Funcs 获取所有任务执行逻辑
func (h *TaskFlow) Funcs() []trait.TaskFunc {
	return *h
}

项目地址

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

最后

我是醉墨居士,我们完成对请求的任务执行流的定义,下篇博客我们实现一下任务执行流的上下文


http://www.kler.cn/news/337510.html

相关文章:

  • 计算机视觉算法 深度学习框架
  • elasticsearch设置账号和密码
  • LFU算法 初始频率 动态频率
  • 零散的知识
  • 基于Springboot+Vue的线上课堂系统(含源码数据库)
  • LabVIEW提高开发效率技巧----严格类型化定义
  • 摩尔云今日学习点
  • 梯度消失和梯度爆炸
  • CSS长度单位:px、ex、vh、vw、vmin、vmax、em、rem
  • 抽象工厂模式(Abstract Factory Pattern)
  • 用java编写飞机大战
  • linux 环境下 docker 镜像获取失败, 重新设置docker镜像下载地址
  • Spring Boot实现License生成与校验详解
  • 数据结构--堆的深度解析
  • 【QT Quick】基础语法:变量和属性
  • P3197 [HNOI2008] 越狱
  • Vue.js 框架的知识点目录
  • 【C++ 真题】B2005 字符三角形
  • 【C语言从不挂科到高绩点】26-卡牌游戏必备功能【抽卡功能】
  • 测试用例的编写