我正在設置一個golang grpc服務器,它將使用TLS進行客戶端授權/身份驗證。我見過的所有服務器設置示例都使用net.Listen()
而不是tls.Listen()
。爲什麼是這樣?爲什麼grpc服務器示例使用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,還是它沒有區別?」
一個例子爲什麼要做某件事的問題是特定於該例子的,並且只能由該例子的作者真正答覆,並且無論如何通常完全不相關。也許如果你發佈了一個關於你的TLS問題的問題,那麼SO社區實際上可以提供幫助。 – Adrian