// CLIENT - CLIENT STREAMING package main import ( "context" "fmt" "log" "net/http" "time" greet "github.com/restuwahyu13/connect-example/stubs/protos" "github.com/restuwahyu13/connect-example/stubs/protos/greetconnect" ) func main() { time.Sleep(time.Second * 2) client := greetconnect.NewGreetServiceClient( http.DefaultClient, "http://localhost:3000", ) c := client.Greet(context.Background()) if err := c.Send(&greet.GreetRequest{Name: "From Client"}); err != nil { log.Fatal(err.Error()) } res, err := c.CloseAndReceive() if err != nil { log.Fatal(err.Error()) } fmt.Println(res.Msg.Greeting) }// SERVER - CLIENT STREAMING package main import ( "context" "errors" "fmt" "log" "net/http" "os" "os/signal" "syscall" "connectrpc.com/connect" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" greet "github.com/restuwahyu13/connect-example/stubs/protos" "github.com/restuwahyu13/connect-example/stubs/protos/greetconnect" ) type greetServer struct{} func main() { service := new(greetServer) mux := http.NewServeMux() mux.Handle(greetconnect.NewGreetServiceHandler(service)) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGTERM) go func() { if err := http.ListenAndServe("localhost:3000", h2c.NewHandler(mux, &http2.Server{})); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("HTTP listen and serve: %v", err) } }() <-signals } func (s *greetServer) Greet(ctx context.Context, req *connect.ClientStream[greet.GreetRequest]) (*connect.Response[greet.GreetResponse], error) { res := &greet.GreetResponse{ Greeting: "hello world", } for req.Receive() { msg := req.Msg() fmt.Println(msg.Name) } return connect.NewResponse(res), nil } // CLIENT - SERVER STREAMING package main import ( "context" "fmt" "log" "net/http" "time" "connectrpc.com/connect" greet "github.com/restuwahyu13/connect-example/stubs/protos" "github.com/restuwahyu13/connect-example/stubs/protos/greetconnect" ) func main() { time.Sleep(time.Second * 2) client := greetconnect.NewGreetServiceClient( http.DefaultClient, "http://localhost:3000", ) c, err := client.Greet(context.Background(), connect.NewRequest(&greet.GreetRequest{Name: "From Client"})) if err != nil { log.Fatal(err.Error()) } for c.Receive() { fmt.Println(c.Msg().Greeting) } } // SERVER - SERVER STREAMING package main import ( "context" "errors" "fmt" "log" "net/http" "os" "os/signal" "syscall" "connectrpc.com/connect" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" greet "github.com/restuwahyu13/connect-example/stubs/protos" "github.com/restuwahyu13/connect-example/stubs/protos/greetconnect" ) type greetServer struct{} func main() { service := new(greetServer) mux := http.NewServeMux() mux.Handle(greetconnect.NewGreetServiceHandler(service)) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGTERM) go func() { if err := http.ListenAndServe("localhost:3000", h2c.NewHandler(mux, &http2.Server{})); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("HTTP listen and serve: %v", err) } }() <-signals } func (s *greetServer) Greet(ctx context.Context, req *connect.Request[greet.GreetRequest], stream *connect.ServerStream[greet.GreetResponse]) error { res := &greet.GreetResponse{ Greeting: "hello world", } fmt.Println(req.Msg.Name) if err := stream.Send(res); err != nil { log.Fatal(err.Error()) } return nil }