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  }