xxxxxxxxxx
// 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
}
xxxxxxxxxx
// 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)
}
xxxxxxxxxx
// 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
}
xxxxxxxxxx
// 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)
}
}