为什么grpc服务器示例使用net.Listen而不是tls.Listen

时间:2017-08-31 19:31:14

标签: ssl go grpc

我正在设置一个golang grpc服务器,它将使用TLS进行客户端授权/身份验证。我见过的所有服务器设置示例都使用net.Listen()而不是tls.Listen()。这是为什么?

import (
    "crypto/tls"
    "github.com/pkg/errors"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"
    "net"
)

func startGRPCListener(hostport string, tlsconfig *tls.Config) (grpcServer *grpc.Server) {
    listener, _ = net.Listen("tcp", hostport)
    cred := grpc.Creds(credentials.NewTLS(tlsconfig))
    grpcServer := grpc.NewServer(cred)
    go func() {
        serveErr := grpcServer.Serve(listener)
        log.WithError(serveErr).Info("GRPC server exited")
    }() 

    return
}

我注意到在几个工作示例中,如果我交换到tls.Listen,则无法再建立连接。但是,在其他情况下,这不会导致问题!

我想我的问题是“我应该使用net.Listen还是tls.Listen,还是没有区别?”

1 个答案:

答案 0 :(得分:3)

  

为什么会这样?

因为这些是关于grpc而不是关于TLS的例子吗? 示例往往是示例:简化以演示某些内容。示例不是生产代码的复制粘贴样本。