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  }