github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/23_proto_actor/distributedchannels/node1/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  
     7  	console "github.com/AsynkronIT/goconsole"
     8  	"github.com/AsynkronIT/protoactor-go/actor"
     9  	"github.com/AsynkronIT/protoactor-go/examples/distributedchannels/messages"
    10  	"github.com/AsynkronIT/protoactor-go/remote"
    11  )
    12  
    13  // define root context
    14  var rootContext = actor.EmptyRootContext
    15  
    16  func newMyMessageSenderChannel() chan<- *messages.MyMessage {
    17  	channel := make(chan *messages.MyMessage)
    18  	remote := actor.NewPID("127.0.0.1:8080", "MyMessage")
    19  	go func() {
    20  		for msg := range channel {
    21  			rootContext.Send(remote, msg)
    22  		}
    23  	}()
    24  
    25  	return channel
    26  }
    27  
    28  func main() {
    29  	runtime.GOMAXPROCS(runtime.NumCPU())
    30  	remote.Start("127.0.0.1:0")
    31  	channel := newMyMessageSenderChannel()
    32  
    33  	for i := 0; i < 10; i++ {
    34  		message := &messages.MyMessage{
    35  			Message: fmt.Sprintf("hello %v", i),
    36  		}
    37  		channel <- message
    38  	}
    39  
    40  	console.ReadLine()
    41  }