Rumah pembangunan bahagian belakang Golang Bagaimana untuk menggunakan GRPC dalam Go?

Bagaimana untuk menggunakan GRPC dalam Go?

May 10, 2023 pm 02:03 PM
go guna grpc

Dengan pembangunan berterusan aplikasi moden, permintaan untuk prestasi tinggi dan skalabiliti juga semakin tinggi dan lebih tinggi Oleh itu, terdapat seni bina yang diedarkan berdasarkan protokol RPC untuk memenuhi keperluan ini. GRPC ialah rangka kerja sumber terbuka berdasarkan StuB dalaman Google. GRPC menyediakan mekanisme yang sangat berskala untuk komunikasi merentas bahasa pengaturcaraan, yang direka untuk mengurus komunikasi piawai antara aplikasi dengan cekap.

Artikel ini akan memperkenalkan cara menggunakan GRPC dalam Go Kami akan merangkumi konsep GRPC, langkah-langkah untuk berkomunikasi menggunakan GRPC dan contoh pelaksanaan perkhidmatan GRPC yang mudah dalam Go.

Konsep GRPC

GRPC ialah rangka kerja RPC berdasarkan HTTP/2, menggunakan protobuf sebagai kaedah siri data lalai. Ini bermakna ia boleh dengan mudah membolehkan komunikasi antara bahasa yang berbeza (memanfaatkan kod yang dijana dan perisian tengah yang disediakan oleh grpc).

Keterluasan: GRPC boleh melaksanakan pengesahan dan logik kebenaran yang ringkas dan kompleks pada aliran kod dan lapisan sambungan, serta boleh bekerjasama dengan platform pengkomputeran moden seperti Kubernetes.

Berkomunikasi menggunakan GRPC

Dalam bahagian ini, kami akan memperkenalkan langkah terperinci untuk berkomunikasi menggunakan GRPC. Dalam artikel ini, kami akan melaksanakan perkhidmatan GRPC mudah menggunakan bahasa Go.

Langkah 1: Tentukan fail protobuf

Mula-mula, kami perlu mentakrifkan fail protobuf kami untuk mengisytiharkan antara muka kami. Dalam contoh ini, kami mentakrifkan perkhidmatan mudah yang menambah dua nombor. Berikut ialah kandungan fail .proto kami:

syntax = "proto3";

option go_package = ".;main";

package calculator;

message AddRequest {
    int32 x = 1;
    int32 y = 2;
}

message AddResponse {
    int32 result = 1;
}

service Calculator {
    rpc Add(AddRequest) returns (AddResponse);
}
Salin selepas log masuk

Dalam fail protobuf ini, kami mentakrifkan dua mesej, AddRequest dan AddResponse dan Kalkulator antara muka perkhidmatan, yang menyediakan kaedah Tambah yang menerima Ambil dua nombor sebagai argumen dan mengembalikan jumlah mereka.

Langkah 2: Jana kod GO

Seterusnya, kita perlu menggunakan alat protok untuk menjana kod GO. Kami boleh menjana kod dengan cara berikut:

protoc --go_out=plugins=grpc:. *.proto
Salin selepas log masuk
Salin selepas log masuk

Perintah ini akan menjana fail calculator.pb.go, yang mengandungi kod GO untuk perkhidmatan dan mesej yang kami tentukan.

Langkah 3: Laksanakan bahagian pelayan

Di bahagian pelayan, kami perlu melaksanakan perkhidmatan untuk antara muka yang kami tetapkan. Dalam kes kami, perkhidmatan kami hanyalah perkhidmatan penambahan mudah yang menambah dua nombor dan mengembalikan jumlahnya. Berikut ialah kod pelayan kami:

package main

import (
    "context"
    "net"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

type server struct{}

func (s *server) Add(ctx context.Context, req *pb.AddRequest) (*pb.AddResponse, error) {
    result := req.X + req.Y
    return &pb.AddResponse{Result:result}, nil
}

func main() {
    l, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }
    s := grpc.NewServer()

    pb.RegisterCalculatorServer(s, &server{})

    err = s.Serve(l)
    if err != nil {
        panic(err)
    }
}
Salin selepas log masuk

Kami mula-mula mentakrifkan struktur bernama "pelayan" dan menambah kaedah Tambah padanya. Kaedah ini akan menerima dua nombor x dan y, mengira jumlahnya, dan mengembalikan AddResponse sebagai objek tindak balas.

Kami juga mentakrifkan fungsi utama di mana kami mencipta perkhidmatan grpc baharu dan mengikatnya pada alamat setempat port 8080. Kami juga menyuntik perkhidmatan yang kami tentukan ke dalam pelayan grpc dan memulakan pelayan grpc.

Langkah 4: Laksanakan klien

Akhir sekali, kami perlu menulis kod klien yang boleh menghantar permintaan ke pelayan kami dan menerima respons. Sila ambil perhatian bahawa fail .proto dalam kod sisi klien dan pelayan mesti sepadan. Di bawah ialah kod pelanggan kami:

package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    pb "github.com/calculator"
)

func main() {
    conn, err := grpc.Dial(":8080", grpc.WithInsecure())
    if err != nil {
        panic(err)
    }

    client := pb.NewCalculatorClient(conn)

    req := pb.AddRequest{X:2, Y:3}
    resp, err := client.Add(context.Background(), &req)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Result: %d", resp.Result)
}
Salin selepas log masuk

Dalam kod pelanggan ini, kami mula-mula membuat sambungan ke pelayan GRPC dan kemudian menggunakan sambungan ini untuk mencipta pelanggan baharu. Seterusnya, kami membuat AddRequest, menetapkan nilainya kepada 2 dan 3, dan menghantar permintaan ke pelayan. Akhirnya, kami menerima dan mencetak respons pelayan.

Cara menjalankan kod sampel

Untuk menjalankan kod sampel kami, kami perlu menyediakan persekitaran pembangunan Go terlebih dahulu dan memasang kebergantungan yang berkaitan. Katakan pakej kod kami dinamakan utama. Untuk menjalankan kod contoh kami secara tempatan, anda perlu terlebih dahulu melaksanakan arahan berikut:

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go
Salin selepas log masuk

Seterusnya jalankan arahan protoc untuk menjana kod go:

protoc --go_out=plugins=grpc:. *.proto
Salin selepas log masuk
Salin selepas log masuk

Kemudian susun kod perkhidmatan dan klien kami, dan susun mereka masing-masing Mulakan mereka:

go build server.go
go build client.go
./server
./client
Salin selepas log masuk

Jika semuanya berjalan lancar, pelanggan akan menghantar permintaan tambahan kepada pelayan GRPC dan memaparkan hasilnya sebagai 5.

Kesimpulan

Artikel ini memperkenalkan cara menggunakan GRPC dalam bahasa Go. Kami mula-mula membincangkan konsep GRPC, dan kemudian menunjukkan cara menggunakan protobuf untuk menentukan spesifikasi antara muka, cara menjana kod GO dan cara melaksanakan perkhidmatan GRPC yang mudah. Dengan menggunakan langkah ini, anda boleh mula menggunakan GRPC dalam Go untuk melaksanakan sistem teragih berprestasi tinggi dan berskala.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan GRPC dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

MetaMask (juga dipanggil Little Fox Wallet dalam bahasa Cina) ialah perisian dompet penyulitan percuma dan diterima baik. Pada masa ini, BTCC menyokong pengikatan pada dompet MetaMask Selepas mengikat, anda boleh menggunakan dompet MetaMask untuk log masuk dengan cepat, menyimpan nilai, membeli syiling, dsb., dan anda juga boleh mendapatkan bonus percubaan 20 USDT untuk pengikatan pertama. Dalam tutorial dompet BTCCMetaMask, kami akan memperkenalkan secara terperinci cara mendaftar dan menggunakan MetaMask, dan cara mengikat dan menggunakan dompet Little Fox dalam BTCC. Apakah dompet MetaMask? Dengan lebih 30 juta pengguna, MetaMask Little Fox Wallet ialah salah satu dompet mata wang kripto yang paling popular hari ini. Ia percuma untuk digunakan dan boleh dipasang pada rangkaian sebagai sambungan

Bagaimana untuk menggunakan gRPC untuk melaksanakan muat naik fail di Golang? Bagaimana untuk menggunakan gRPC untuk melaksanakan muat naik fail di Golang? Jun 03, 2024 pm 04:54 PM

Bagaimana untuk melaksanakan muat naik fail menggunakan gRPC? Buat definisi perkhidmatan sokongan, termasuk permintaan dan mesej respons. Pada klien, fail yang hendak dimuat naik dibuka dan dibahagikan kepada beberapa bahagian, kemudian distrim ke pelayan melalui aliran gRPC. Di bahagian pelayan, ketulan fail diterima dan disimpan ke dalam fail. Pelayan menghantar respons selepas muat naik fail selesai untuk menunjukkan sama ada muat naik berjaya.

Bagaimana untuk menghantar mesej Go WebSocket? Bagaimana untuk menghantar mesej Go WebSocket? Jun 03, 2024 pm 04:53 PM

Dalam Go, mesej WebSocket boleh dihantar menggunakan pakej gorila/soket web. Langkah khusus: Wujudkan sambungan WebSocket. Hantar mesej teks: Panggil WriteMessage(websocket.TextMessage,[]bait("Mesej")). Hantar mesej binari: panggil WriteMessage(websocket.BinaryMessage,[]bait{1,2,3}).

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Jun 02, 2024 am 09:00 AM

Dalam Go, anda boleh menggunakan ungkapan biasa untuk memadankan cap masa: susun rentetan ungkapan biasa, seperti yang digunakan untuk memadankan cap masa ISO8601: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Gunakan fungsi regexp.MatchString untuk menyemak sama ada rentetan sepadan dengan ungkapan biasa.

Perbezaan antara bahasa Golang dan Go Perbezaan antara bahasa Golang dan Go May 31, 2024 pm 08:10 PM

Bahasa Go dan Go adalah entiti yang berbeza dengan ciri yang berbeza. Go (juga dikenali sebagai Golang) terkenal dengan kesesuaiannya, kelajuan penyusunan pantas, pengurusan memori dan kelebihan merentas platform. Kelemahan bahasa Go termasuk ekosistem yang kurang kaya berbanding bahasa lain, sintaks yang lebih ketat dan kekurangan penaipan dinamik.

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Jun 04, 2024 pm 12:27 PM

Kebocoran memori boleh menyebabkan memori program Go terus meningkat dengan: menutup sumber yang tidak lagi digunakan, seperti fail, sambungan rangkaian dan sambungan pangkalan data. Gunakan rujukan yang lemah untuk mengelakkan kebocoran memori dan objek sasaran untuk pengumpulan sampah apabila ia tidak lagi dirujuk dengan kuat. Menggunakan go coroutine, memori tindanan coroutine akan dikeluarkan secara automatik apabila keluar untuk mengelakkan kebocoran memori.

Apakah Bitget Launchpool? Bagaimana untuk menggunakan Bitget Launchpool? Apakah Bitget Launchpool? Bagaimana untuk menggunakan Bitget Launchpool? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool ialah platform dinamik yang direka untuk semua peminat mata wang kripto. BitgetLaunchpool menonjol dengan produknya yang unik. Di sini, anda boleh mempertaruhkan token anda untuk membuka kunci lebih banyak ganjaran, termasuk airdrop, ganjaran yang tinggi dan kumpulan hadiah yang murah eksklusif untuk peserta awal. Apakah BitgetLaunchpool? BitgetLaunchpool ialah platform mata wang kripto di mana token boleh dipertaruhkan dan diperoleh dengan terma dan syarat yang mesra pengguna. Dengan melabur BGB atau token lain dalam Launchpool, pengguna berpeluang menerima airdrop percuma, pendapatan dan mengambil bahagian dalam kumpulan bonus yang murah hati. Pendapatan daripada aset yang dicagarkan dikira dalam masa T+1 jam dan ganjaran adalah berdasarkan

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Unit menguji fungsi serentak adalah penting kerana ini membantu memastikan kelakuan mereka yang betul dalam persekitaran serentak. Prinsip asas seperti pengecualian bersama, penyegerakan dan pengasingan mesti dipertimbangkan semasa menguji fungsi serentak. Fungsi serentak boleh diuji unit dengan mensimulasikan, menguji keadaan perlumbaan dan mengesahkan keputusan.

See all articles