]> go.fuhry.dev Git - grpc-quic.git/commitdiff
Update README.md
authorgun <sssgun@gmail.com>
Thu, 2 Dec 2021 01:20:14 +0000 (10:20 +0900)
committerGitHub <noreply@github.com>
Thu, 2 Dec 2021 01:20:14 +0000 (10:20 +0900)
README.md

index 37a498a42ddd1af9db6cdb40a060bca559078580..8cfbe358228d0bf7a07a6ea2768776e386eb2a1a 100644 (file)
--- 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
+}
+```