| | |
| | | "fmt" |
| | | "os" |
| | | "os/signal" |
| | | "sync" |
| | | "time" |
| | | |
| | | "golang.org/x/sys/unix" |
| | |
| | | go shmSenderImpl(s) |
| | | |
| | | c := make(chan os.Signal, 1) |
| | | signal.Notify(c, os.Interrupt, os.Kill, unix.SIGTERM) |
| | | signal.Notify(c, os.Interrupt, os.Kill, unix.SIGINT) |
| | | <-c |
| | | |
| | | cancel() |
| | | s.Close() |
| | | } |
| | | |
| | | func shmRecvImpl(c deliver.Deliver, url string, index int) { |
| | | func shmRecvImpl(wg *sync.WaitGroup, c deliver.Deliver, url string, index int) { |
| | | |
| | | var msg []byte |
| | | var err error |
| | |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | wg.Done() |
| | | return |
| | | default: |
| | | msg, err = c.Recv() |
| | |
| | | |
| | | // time.Sleep(10 * time.Millisecond) |
| | | } |
| | | |
| | | } |
| | | |
| | | func shmReciever(url string, count int) { |
| | | |
| | | wg := sync.WaitGroup{} |
| | | |
| | | var cs []deliver.Deliver |
| | | for i := 0; i < count; i++ { |
| | | wg.Add(1) |
| | | c := deliver.NewClient(deliver.Shm, url) |
| | | cs = append(cs, c) |
| | | go shmRecvImpl(c, url, i) |
| | | go shmRecvImpl(&wg, c, url, i) |
| | | } |
| | | |
| | | c := make(chan os.Signal, 1) |
| | |
| | | <-c |
| | | |
| | | cancel() |
| | | wg.Wait() |
| | | for _, v := range cs { |
| | | v.Close() |
| | | } |