Предисловие: применить bctЭто снова задействовано
service
иproto
,Не совсем понимаю,Учись~ Установите здесь флажок и получите сертификат сетевого инженера или сертификат встроенного инженера до конца года.
NOTICE 2023-09-26 10:56:46.336009+0800: Stopping tcpdump since packet capture is not required by the remaining tests
NOTICE 2023-09-26 10:56:46.336774+0800: Terminating BCT.
*** Beginning Network Interoperability Test ***
Please enter the device's service type in the form
"_<service>._<proto>.local.", e.g. "_printer._tcp.local."
(or try again with "-M"):
Прото-файлы — это язык, разработанный Google для определения структур данных и сервисных интерфейсов, который часто используется для обмена данными и связи между различными платформами.
Прото-файлы состоят из трех основных компонентов: сообщения, службы и перечисления.
Сообщения — это основной способ определения структур данных, аналогичных классам в объектно-ориентированном программировании. Вы можете определить поля в сообщении, указать тип и имя поля, а также добавить метаданные, например комментарии.
Служба определяет набор методов, которые можно вызывать удаленно. Каждый метод имеет входные и выходные параметры, и в сервисе можно определить несколько методов.
Перечисление определяет набор именованных целочисленных констант, которые можно использовать в качестве диапазонов значений для полей сообщений или опций для методов службы.
В дополнение к вышеупомянутым базовым компонентам файлы Proto также поддерживают операторы импорта для импорта других файлов Proto, что позволяет обеспечить модульность и повторное использование.
Файлы Proto используют краткий синтаксис для определения структур данных и интерфейсов, а также поддерживают расширенные функции, такие как расширения и пользовательские параметры, что делает их очень подходящими для межплатформенного обмена данными и сценариев взаимодействия.
Следует отметить, что файл Proto является лишь языком определения и не соответствует напрямую конкретному коду реализации. Вам необходимо использовать соответствующий компилятор или инструмент для преобразования файла Proto в конкретный код целевой платформы.
Оптимизировать определение файла Proto и описание параметров
1. Соглашение об именах файлов прототипа: имя пакета.имя сервиса.proto
2. Ключевые слова протосинтаксиса:
Тип переменной:
3. Пример:
syntax = "proto3";
package user;
service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse){}
}
message HelloRequest {}
message HelloResponse {
string msg = 1;
}
Скомпилировать команду:
protoc --go_out=plugins=grpc:. server.hello.proto
Пример на стороне сервера:
package main
import (
"flag"
"fmt"
"log"
"net"
user "grpc.zozoo.net/protos"
"grpc.zozoo.net/impl"
"google.golang.org/grpc"
)
func main() {
flag.Parse()
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 9000))
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
log.Println("Мониторинг порта успешен: 9000")
grpcServer := grpc.NewServer()
user.RegisterHelloServiceServer(grpcServer, &impl.HelloService{})
grpcServer.Serve(lis)
}
Пример клиента:
package main
import (
"context"
"log"
"google.golang.org/grpc"
user "grpc.zozoo.net/protos"
)
func main() {
conn, err := grpc.Dial(":9000", grpc.WithInsecure())
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// Вызов метода RPC
hello := user.NewHelloServiceClient(conn)
rsp, err := hello.SayHello(context.TODO(), &user.HelloRequest{})
if err != nil {
log.Fatalf("Вызов метода не выполнен err %v", err)
}
log.Println(rsp.Msg)
defer conn.Close()
}