2017-08-31 34 views
-2

我正在設置一個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,還是它沒有區別?」

+0

一個例子爲什麼要做某件事的問題是特定於該例子的,並且只能由該例子的作者真正答覆,並且無論如何通常完全不相關。也許如果你發佈了一個關於你的TLS問題的問題,那麼SO社區實際上可以提供幫助。 – Adrian

回答

3

這是爲什麼?

因爲這些是關於grpc而不是關於TLS的例子嗎?示例往往是示例:簡化來演示一些東西。示例不是生產代碼的複製粘貼樣本。

+0

正是這樣。 TLS版本不是一個可以複製粘貼執行以瞭解其工作原理的示例 - 他們必須設置證書才能使其工作,並且它不會爲示例提供gRPC功能方面的幫助實際上試圖展示。 – Adrian