Напишите полное приложение gRPC на Golang
Что такое gRPC?
Это платформа, разработанная Google для обработки удаленных вызовов процедур (RPC).
Сегодня gRPC используется технологическими лидерами, такими как Google, Cisco, Dropbox, Netflix, IBM и т. д.
Для получения официальной документации посетите grpc.io.
Преимущества
gRPC использует HTTP/2 в качестве транспортного протокола. Несмотря на совместимость с HTTP 1.1, HTTP/2 обладает множеством дополнительных возможностей:
- Облегченные сообщения. Сообщения, закодированные с помощью gRPC, могут быть на 60–80 % меньше, чем сообщения JSON.
- Генерация кода. gRPC имеет автоматизированную генерацию кода, которая охватывает такие языки, как C#, C++, Java, Go, Kotlin, Node, PHP, Python, Ruby и другие.
- Поддерживает потоковую передачу. gRPC также обеспечивает потоковую передачу данных: потоковая передача на стороне сервера, потоковая передача на стороне клиента и двунаправленная потоковая передача.
- Сверхбыстрый. gRPC в 7 или даже 8 раз быстрее, чем связь REST+JSON.
Что такое протокольные буферы?
Буферы протокола — это независимый от языка и платформы расширяемый механизм Google для сериализации структурированных данных — представьте XML, но меньше, быстрее и проще.
Один раз вы определяете, как должны быть структурированы ваши данные, а затем можете использовать специально сгенерированный исходный код, чтобы легко записывать структурированные данные и считывать их из различных потоков данных и с использованием различных языков.
Вы можете определить сообщение protobuf в файле .proto
следующим образом:
Предпосылки
Голанг
У вас должна быть установлена одна из трех последних основных версий Go.
Компилятор буфера протокола
Чтобы скомпилировать определение протокола (.proto file)
, мы должны установить компилятор буфера протокола, а также плагины golang для компилятора протокола.
Компилятор protobuf представляет собой исполняемый файл, который можно загрузить здесь (официальная страница).
Например, в Linux вы загрузите
protoc-21.6-linux-x86_64.zip
Затем следуйте файлу readme (он отличается от Windows, Linux и OSX).
По сути, вы должны поместить содержимое папки bin (двоичный файл protoc) в свой PATH.
Плагины Go
Затем вам нужно установить подключаемые модули Go для компилятора протокола:
$
go install google.golang.org/protobuf/cmd/protoc-gen-go$
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
и, наконец (если вы еще этого не сделали), вам нужно обновить PATH
, чтобы включить go/bin, чтобы protoc
мог найти только что установленные вами плагины.
$ export PATH="$PATH:$(go env GOPATH)/bin"
теперь у вас есть все инструменты, необходимые для создания сервера gRPC 😃
Первые шаги
Во-первых, вы должны запустить проект golang (назовите его как хотите, я называю свой grpctutorial)
$
go mod init grpctutorial
Затем вам нужно установить пакет grpc-go
$
go get -u google.golang.org/grpc
Теперь пишем основную функцию (и файл main.go)
Затем вам нужно создать свой первый файл протокола и поместить его в каталог с именем tutorial.
Скомпилировать прото файл
Теперь, когда мы определили наш прототип, нам нужно скомпилировать его в код Golang.
Перейдите с помощью терминала в папку, содержащую ваш файл .proto, и выполните эту команду.
$ protoc --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ *.proto
По сути, эта команда получит все файлы *.proto
в папке, в которой вы сейчас находитесь, и скомпилирует их с двоичным файлом protoc, который мы установили ранее с плагином grpc.
Мой проект после компиляции выглядит так:
Примечание. Я поместил файл tutorial.proto в папку/пакет учебника.
Файл tutorial_grpc.pb.go
является результатом tutorial.proto
файла, скомпилированного с помощью protoc (с плагином grpc).
Внутри tutorial_grpc.pb.go
file находятся все наши типы, определенные в файле proto, а также серверный и клиентский код.
Реализация сервера gRPC
Перед запуском сервера gRPC мы должны реализовать методы, которые мы определили в файле .proto
file.
В нашем примере мы должны реализовать
rpc SayHello (HelloRequest) returns (HelloReply) {}
Чтобы запустить сервер gRPC, мы должны реализовать этот интерфейс (вы можете найти его в tutorial_grpc.pb.go
file)
Сначала мы создаем файл server.go
file вместе с файлом .proto
file.
Теперь нам нужно запустить сервер и обслуживать его через порт TCP в файле main.go.
Теперь вы готовы запустить сервер на порту 9000😃 😃
$ go run .
Давайте протестируем наш сервер gRPC с помощью BloomRPC (GUI-клиент для сервисов RPC).
Вы можете скачать Bloom со страницы github.
После установки вы должны добавить прототип, который вы определили в своем проекте (в моем случае tutorial.proto), а затем вы можете протестировать свои API.
Наш сервер работает 😃
Последние мысли
Теперь вы, наконец, создали свой первый сервер gRPC.
Если вы зашли так далеко, надеюсь, вам понравилось!
Пожалуйста, оставьте комментарий, если у вас есть какие-либо вопросы.
Спасибо за чтение.