github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/stream/server/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "io" 7 "log" 8 9 proto "github.com/micro/go-micro/examples/stream/server/proto" 10 "github.com/micro/go-micro/v2" 11 ) 12 13 type Streamer struct{} 14 15 // Server side stream 16 func (e *Streamer) ServerStream(ctx context.Context, req *proto.Request, stream proto.Streamer_ServerStreamStream) error { 17 fmt.Printf("ServerStream Got msg %v\n", req.Count) 18 for i := 0; i < int(req.Count); i++ { 19 fmt.Println("sent", i) 20 if err := stream.Send(&proto.Response{Count: int64(i)}); err != nil { 21 return err 22 } 23 } 24 return nil 25 } 26 27 // Bidirectional stream 28 func (e *Streamer) Stream(ctx context.Context, stream proto.Streamer_StreamStream) error { 29 fmt.Println("Stream") 30 for { 31 req, err := stream.Recv() 32 if err == io.EOF { 33 return nil 34 } 35 if err != nil { 36 return err 37 } 38 fmt.Printf("Got msg %v\n", req.Count) 39 if err := stream.Send(&proto.Response{Count: req.Count}); err != nil { 40 return err 41 } 42 } 43 } 44 45 func main() { 46 // new service 47 service := micro.NewService( 48 micro.Name("go.micro.srv.stream"), 49 ) 50 51 // Init command line 52 service.Init() 53 54 // Register Handler 55 proto.RegisterStreamerHandler(service.Server(), new(Streamer)) 56 57 // Run service 58 if err := service.Run(); err != nil { 59 log.Fatal(err) 60 } 61 }