4.2. 连接 Server

未匹配的标注

Github: github.com/bigfile/bigfile

连接 Server

由于连接 Server 部分代码是通用的,所以在这里给出一个统一示例。我们的示例是基于双端验证的,您要做的只是生成客户端证书即可。如果您忘了,可以再看一下 启动 Bigfile 章节。示例代码如下:

package main

import (
    "crypto/tls"
    "crypto/x509"
    "fmt"
    "io/ioutil"

    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"
)

func createConnection() (*grpc.ClientConn, error) {
    var (
        err           error
        conn          *grpc.ClientConn
        cert          tls.Certificate
        certPool      *x509.CertPool
        rootCertBytes []byte
    )
    if cert, err = tls.LoadX509KeyPair("client.pem", "client.key"); err != nil {
        return nil, err
    }

    certPool = x509.NewCertPool()
    if rootCertBytes, err = ioutil.ReadFile("ca.pem"); err != nil {
        return nil, err
    }

    if !certPool.AppendCertsFromPEM(rootCertBytes) {
        return nil, err
    }

    if conn, err = grpc.Dial("192.168.0.103:10986", grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{
        Certificates: []tls.Certificate{cert},
        RootCAs:      certPool,
    }))); err != nil {
        return nil, err
    }
    return conn, err
}

func main() {
    var (
        err  error
        conn *grpc.ClientConn
    )

    if conn, err = createConnection(); err != nil {
        fmt.Println(err)
        return
    }
    defer conn.Close()
}

接下来,我们基于创建好的 conn 继续操作。

英文文档:bigfile.site

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
Michael001
讨论数量: 0
发起讨论 只看当前版本


暂无话题~