github.com/gogf/gf@v1.16.9/.example/os/gproc/gproc_comm_group.go (about) 1 // 该示例是gproc_comm.go的改进,增加了分组消息的演示。 2 package main 3 4 import ( 5 "fmt" 6 "os" 7 "time" 8 9 "github.com/gogf/gf/os/gproc" 10 "github.com/gogf/gf/os/gtime" 11 ) 12 13 func main() { 14 fmt.Printf("%d: I am child? %v\n", gproc.Pid(), gproc.IsChild()) 15 if gproc.IsChild() { 16 // sending group: test1 17 gtime.SetInterval(time.Second, func() bool { 18 if err := gproc.Send(gproc.PPid(), []byte(gtime.Datetime()), "test1"); err != nil { 19 fmt.Printf("test1: error - %s\n", err.Error()) 20 } 21 return true 22 }) 23 // sending group: test2 24 gtime.SetInterval(time.Second, func() bool { 25 if err := gproc.Send(gproc.PPid(), []byte(gtime.Datetime()), "test2"); err != nil { 26 fmt.Printf("test2: error - %s\n", err.Error()) 27 } 28 return true 29 }) 30 // sending group: test3, will cause error 31 gtime.SetInterval(time.Second, func() bool { 32 if err := gproc.Send(gproc.PPid(), []byte(gtime.Datetime()), "test3"); err != nil { 33 fmt.Printf("test3: error - %s\n", err.Error()) 34 } 35 return true 36 }) 37 select {} 38 } else { 39 m := gproc.NewManager() 40 p := m.NewProcess(os.Args[0], os.Args, os.Environ()) 41 p.Start() 42 // receiving group: test1 43 go func() { 44 for { 45 msg := gproc.Receive("test1") 46 fmt.Printf("test1: receive from %d, data: %s\n", msg.Pid, string(msg.Data)) 47 } 48 }() 49 // receiving group: test2 50 go func() { 51 for { 52 msg := gproc.Receive("test2") 53 fmt.Printf("test1: receive from %d, data: %s\n", msg.Pid, string(msg.Data)) 54 } 55 }() 56 select {} 57 } 58 }