github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/23_proto_actor/remoterouting/client/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "runtime" 7 "sync" 8 "time" 9 10 console "github.com/AsynkronIT/goconsole" 11 "github.com/AsynkronIT/protoactor-go/actor" 12 "github.com/AsynkronIT/protoactor-go/examples/remoterouting/messages" 13 "github.com/AsynkronIT/protoactor-go/mailbox" 14 "github.com/AsynkronIT/protoactor-go/remote" 15 "github.com/AsynkronIT/protoactor-go/router" 16 ) 17 18 func main() { 19 runtime.GOMAXPROCS(runtime.NumCPU()) 20 runtime.GC() 21 22 remote.Start("127.0.0.1:8100") 23 24 p1 := actor.NewPID("127.0.0.1:8101", "remote") 25 p2 := actor.NewPID("127.0.0.1:8102", "remote") 26 27 rootContext := actor.EmptyRootContext 28 29 remotePID := rootContext.Spawn(router.NewConsistentHashGroup(p1, p2)) 30 31 messageCount := 1000000 32 33 var wgStop sync.WaitGroup 34 35 props := actor. 36 PropsFromProducer(newLocalActor(&wgStop, messageCount)). 37 WithMailbox(mailbox.Bounded(10000)) 38 39 pid := rootContext.Spawn(props) 40 41 log.Println("Starting to send") 42 43 t := time.Now() 44 45 for i := 0; i < messageCount; i++ { 46 message := &messages.Ping{User: fmt.Sprintf("User_%d", i)} 47 rootContext.RequestWithCustomSender(remotePID, message, pid) 48 } 49 50 wgStop.Wait() 51 52 rootContext.Stop(pid) 53 54 fmt.Printf("elapsed: %v\n", time.Since(t)) 55 56 console.ReadLine() 57 }