剖析Go编写的Socket服务器模块解耦及基础模块的设计

2020-01-28 11:56:52于丽

type DoTask interface { 
    Excute() 

 
var tasklist []interface{} 
 
func AddTask(controller DoTask) { 
    var arr interface{} 
    arr = controller 
    tasklist = append(tasklist,arr) 
    fmt.Println(tasklist) 
    } 

在这里以一个定时报时任务作为例子:

type Task1 struct {} 
 
func (this * Task1)Excute() { 
    timer := time.NewTicker(2 * time.Second) 
    for { 
        select { 
        case <-timer.C: 
            go func() { 
                Log(time.Now()) 
            }() 
        } 
    } 

 
func init() { 
    var task1 Task1 
    tasklist = make([]interface{} ,0 , 20) 
    AddTask(&task1) 
        for _, v := range tasklist { 
            v.(DoTask).Excute() 
        } 
 


注意这里的定时任务要做成非阻塞的,否则整个Server都会卡在tasklist的第一个task的。。。