func main() { runtime.GOMAXPROCS(runtime.NumCPU()) remoting.Start("127.0.0.1:8080") clients := hashset.New() props := actor.FromFunc(func(context actor.Context) { switch msg := context.Message().(type) { case *messages.Connect: log.Printf("Client %v connected", msg.Sender) clients.Add(msg.Sender) msg.Sender.Tell(&messages.Connected{Message: "Welcome!"}) case *messages.SayRequest: notifyAll(clients, &messages.SayResponse{ UserName: msg.UserName, Message: msg.Message, }) case *messages.NickRequest: notifyAll(clients, &messages.NickResponse{ OldUserName: msg.OldUserName, NewUserName: msg.NewUserName, }) } }) actor.SpawnNamed(props, "chatserver") console.ReadLine() }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GC() remoting.Start("127.0.0.1:8080") props := actor. FromProducer(newRemoteActor()). WithMailbox(actor.NewBoundedMailbox(1000, 10000)) actor.SpawnNamed(props, "remote") console.ReadLine() }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) remoting.Start("127.0.0.1:0") channel := newMyMessageSenderChannel() for i := 0; i < 10; i++ { message := &messages.MyMessage{ Message: fmt.Sprintf("hello %v", i), } channel <- message } console.ReadLine() }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) var wgStop sync.WaitGroup var wgStart sync.WaitGroup messageCount := 1000000 remoting.Start("127.0.0.1:8081") props := actor. FromProducer(newLocalActor(&wgStart, &wgStop, messageCount)). WithMailbox(actor.NewBoundedMailbox(1000, 10000)) pid := actor.Spawn(props) message := &messages.Ping{Sender: pid} remote := actor.NewPID("127.0.0.1:8080", "remote") remote.Tell(&messages.StartRemote{Sender: pid}) wgStart.Wait() start := time.Now() log.Println("Starting to send") for i := 0; i < messageCount; i++ { remote.Tell(message) } wgStop.Wait() elapsed := time.Since(start) log.Printf("Elapsed %s", elapsed) x := int(float32(messageCount*2) / (float32(elapsed) / float32(time.Second))) log.Printf("Msg per sec %v", x) // f, err := os.Create("memprofile") // if err != nil { // log.Fatal(err) // } // pprof.WriteHeapProfile(f) // f.Close() }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) remoting.Start("127.0.0.1:0") server := actor.NewPID("127.0.0.1:8080", "chatserver") //spawn our chat client inline props := actor.FromFunc(func(context actor.Context) { switch msg := context.Message().(type) { case *messages.Connected: log.Println(msg.Message) case *messages.SayResponse: log.Printf("%v: %v", msg.UserName, msg.Message) case *messages.NickResponse: log.Printf("%v is now known as %v", msg.OldUserName, msg.NewUserName) } }) client := actor.Spawn(props) server.Tell(&messages.Connect{ Sender: client, }) nick := "Roger" cons := console.NewConsole(func(text string) { server.Tell(&messages.SayRequest{ UserName: nick, Message: text, }) }) //write /nick NAME to change your chat username cons.Command("/nick", func(newNick string) { server.Tell(&messages.NickRequest{ OldUserName: nick, NewUserName: newNick, }) }) cons.Run() }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) remoting.Start("127.0.0.1:8080") //create the channel channel := make(chan *messages.MyMessage) //create an actor receiving messages and pushing them onto the channel props := actor.FromFunc(func(context actor.Context) { switch msg := context.Message().(type) { case *messages.MyMessage: channel <- msg } }) actor.SpawnNamed(props, "MyMessage") //consume the channel just like you use to go func() { for msg := range channel { log.Println(msg) } }() console.ReadLine() }