From: gun Date: Thu, 2 Dec 2021 01:20:14 +0000 (+0900) Subject: Update README.md X-Git-Tag: v0.1.2~1 X-Git-Url: https://go.fuhry.dev/?a=commitdiff_plain;h=caeee4f4b3b7a39636a3c796597ff6cf7a7db45b;p=grpc-quic.git Update README.md --- diff --git a/README.md b/README.md index 37a498a..8cfbe35 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,80 @@ import "github.com/sssgun/grpc-quic" ``` ## Usage -* gRPC-Go + QUIC-Go - * https://github.com/grpc/grpc-go/tree/master/examples/helloworld - * https://github.com/lucas-clemente/quic-go/tree/master/example ### As a server -See the example server. +```go +func echoGrpcQuicServer(certFile, keyFile string) error { + log.Println("starting echo quic server") + + tlsConf, err := generateTLSConfig(certFile, keyFile) + if err != nil { + log.Printf("QuicServer: failed to generateTLSConfig. %s", err.Error()) + return err + } + + ql, err := quic.ListenAddr(*addr, tlsConf, nil) + if err != nil { + log.Printf("QuicServer: failed to ListenAddr. %s", err.Error()) + return err + } + listener := qnet.Listen(ql) + + s := grpc.NewServer() + pb.RegisterGreeterServer(s, &server{}) + log.Printf("QuicServer: listening at %v", listener.Addr()) + + if err := s.Serve(listener); err != nil { + log.Printf("QuicServer: failed to serve. %v", err) + return err + } + + log.Println("stopping echo quic server") + return nil +} +``` + ### As a client -See the example client. \ No newline at end of file +```go +func echoGrpcQuicClient() error { + tlsConf := &tls.Config{ + InsecureSkipVerify: true, + NextProtos: []string{"quic-echo-example"}, + } + + creds := qnet.NewCredentials(tlsConf) + + dialer := qnet.NewQuicDialer(tlsConf) + grpcOpts := []grpc.DialOption{ + grpc.WithContextDialer(dialer), + grpc.WithTransportCredentials(creds), + } + + conn, err := grpc.Dial(*addr, grpcOpts...) + if err != nil { + log.Printf("QuicClient: failed to grpc.Dial. %s", err.Error()) + return err + } + defer func(conn *grpc.ClientConn) { + err := conn.Close() + if err != nil { + log.Printf("QuicClient: failed to close - grpc.Dial. %s", err.Error()) + } + }(conn) + + c := pb.NewGreeterClient(conn) + name := defaultName + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) + if err != nil { + log.Printf("QuicClient: could not greet. %v", err) + return err + } + log.Printf("QuicClient: Greeting=%s", r.GetMessage()) + + return nil +} +```