Rumah pembangunan bahagian belakang Golang Pembangunan Golang: Cara menggunakan gRPC untuk mencapai komunikasi merentas bahasa

Pembangunan Golang: Cara menggunakan gRPC untuk mencapai komunikasi merentas bahasa

Sep 21, 2023 am 11:03 AM
golang grpc komunikasi silang bahasa

Pembangunan Golang: Cara menggunakan gRPC untuk mencapai komunikasi merentas bahasa

Pembangunan Golang: Cara menggunakan gRPC untuk mencapai komunikasi silang bahasa

Ikhtisar:
Dalam pembangunan perisian moden, komunikasi antara sistem antara bahasa yang berbeza adalah sangat biasa. Untuk menyelesaikan masalah ini, rangka kerja gRPC sumber terbuka Google, yang merupakan rangka kerja panggilan prosedur jauh (RPC) berprestasi tinggi merentas bahasa. Artikel ini akan memperkenalkan cara menggunakan gRPC dalam pembangunan Golang dan membantu pembaca memahami cara mencapai komunikasi merentas bahasa melalui contoh kod tertentu.

Apakah itu gRPC?
gRPC (gRPC Remote Procedure Call) ialah rangka kerja panggilan prosedur jauh (RPC) berprestasi tinggi, sumber terbuka, merentas bahasa. Ia dibangunkan berdasarkan Protokol Penampan Google (ProtoBuf untuk pendek) protokol bersiri. Dengan mentakrifkan jenis perkhidmatan dan mesej, gRPC boleh menjana kod sisi klien dan pelayan dengan mudah dalam pelbagai bahasa untuk mencapai komunikasi antara bahasa yang berbeza.

Persediaan persekitaran:
Sebelum bermula, pastikan anda telah memasang persekitaran pembangunan Golang dan gRPC. Anda boleh memasang alat pembangunan gRPC dan pemalam Golang melalui dokumentasi rasmi.

Langkah 1: Tentukan fail .proto
.fail proto ialah salah satu teras gRPC dan digunakan untuk menentukan perkhidmatan dan jenis mesej. Kami boleh menggunakan bahasa ProtoBuf untuk mentakrifkan struktur dan perkhidmatan data.

Berikut ialah contoh mudah fail .proto yang mentakrifkan perkhidmatan HelloWorld, termasuk kaedah SayHello Parameter input ialah mesej HelloRequest dan mengembalikan mesej HelloResponse.

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}
Salin selepas log masuk

Langkah 2: Jana kod
Selepas menentukan fail .proto, kita boleh menggunakan protok pengkompil protokol yang disediakan oleh gRPC untuk menjana kod sisi klien dan pelayan dalam bahasa yang sepadan.

Laksanakan arahan berikut dalam terminal untuk menjana kod Golang:

protoc -I=./protos --go_out=plugins=grpc:./protos ./protos/helloworld.proto
Salin selepas log masuk

Arahan ini akan menghasilkan fail helloworld.pb.go berdasarkan direktori di mana fail .proto berada.

Langkah 3: Tulis kod sebelah pelayan
Seterusnya, kami menggunakan Golang untuk menulis kod sebelah pelayan. Pertama, kita perlu mengimport gRPC dan fail .pb.go yang dijana secara automatik.

package main

import (
    "context"
    "fmt"
    "log"
    "net"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *protos.HelloRequest) (*protos.HelloResponse, error) {
    return &protos.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    protos.RegisterGreeterServer(s, &server{})
    fmt.Println("Server started on port" + port)
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan struktur bernama pelayan dan melaksanakan kaedah SayHello yang kami takrifkan dalam fail .proto. Antaranya, kaedah SayHello menerima parameter jenis HelloRequest dan mengembalikan respons jenis HelloResponse.

Langkah 4: Tulis kod pelanggan
Seterusnya, kami menggunakan Golang untuk menulis kod pelanggan. Pertama, anda juga perlu mengimport gRPC dan fail .pb.go yang dijana secara automatik.

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/example/protos"
    "google.golang.org/grpc"
)

const (
    address = "localhost:50051"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := protos.NewGreeterClient(conn)
    name := "World"
    r, err := c.SayHello(context.Background(), &protos.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
    fmt.Println("Client finished")
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan grpc.Dial untuk mewujudkan sambungan dengan pelayan dan mencipta GreeterClient untuk memanggil kaedah SayHello. Kemudian, keluarkan kandungan mesej yang dikembalikan oleh pelayan.

Langkah 5: Jalankan kod
Akhir sekali, kami menjalankan dua keping kod ini untuk mengujinya. Mula-mula, mulakan kod sebelah pelayan, dan kemudian mulakan kod sebelah klien.

Anda akan melihat pelayan mencetak "Pelayan bermula pada port: 50051" dan pelanggan mencetak "Salam: Hello World". Ini bermakna pelayan berjaya menerima permintaan pelanggan dan mengembalikan respons yang betul.

Ringkasan:
Dengan menggunakan rangka kerja gRPC, kita boleh mencapai komunikasi merentas bahasa dengan mudah. Dalam artikel ini, kami menunjukkan cara untuk membangunkan menggunakan gRPC di Golang melalui kod sampel tertentu. Anda boleh mentakrifkan mesej dan perkhidmatan berdasarkan keperluan anda, dan menulis kod sisi pelayan dan sisi klien untuk membolehkan komunikasi merentas bahasa. Saya harap artikel ini dapat membantu anda memahami dan menggunakan rangka kerja gRPC.

Atas ialah kandungan terperinci Pembangunan Golang: Cara menggunakan gRPC untuk mencapai komunikasi merentas bahasa. 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)

Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Jun 06, 2024 pm 05:14 PM

Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Jun 06, 2024 am 11:21 AM

Bagaimana untuk mengkonfigurasi pengumpulan sambungan untuk sambungan pangkalan data Go? Gunakan jenis DB dalam pakej pangkalan data/sql untuk membuat sambungan pangkalan data untuk mengawal bilangan maksimum sambungan serentak;

Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Jun 06, 2024 pm 12:37 PM

Perbezaan antara rangka kerja GoLang dan rangka kerja Go ditunjukkan dalam seni bina dalaman dan ciri luaran. Rangka kerja GoLang adalah berdasarkan perpustakaan standard Go dan meluaskan fungsinya, manakala rangka kerja Go terdiri daripada perpustakaan bebas untuk mencapai tujuan tertentu. Rangka kerja GoLang lebih fleksibel dan rangka kerja Go lebih mudah digunakan. Rangka kerja GoLang mempunyai sedikit kelebihan dalam prestasi dan rangka kerja Go lebih berskala. Kes: gin-gonic (rangka Go) digunakan untuk membina REST API, manakala Echo (rangka kerja GoLang) digunakan untuk membina aplikasi web.

Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Jun 06, 2024 am 11:24 AM

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Jun 06, 2024 am 10:51 AM

Fungsi FindStringSubmatch mencari subrentetan pertama dipadankan dengan ungkapan biasa: fungsi mengembalikan hirisan yang mengandungi subrentetan yang sepadan, dengan elemen pertama ialah keseluruhan rentetan dipadankan dan elemen berikutnya ialah subrentetan individu. Contoh kod: regexp.FindStringSubmatch(teks,corak) mengembalikan sekeping subrentetan yang sepadan. Kes praktikal: Ia boleh digunakan untuk memadankan nama domain dalam alamat e-mel, contohnya: e-mel:="user@example.com", pattern:=@([^\s]+)$ untuk mendapatkan padanan nama domain [1].

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana untuk menggunakan zon waktu yang telah ditetapkan dengan Golang? Bagaimana untuk menggunakan zon waktu yang telah ditetapkan dengan Golang? Jun 06, 2024 pm 01:02 PM

Menggunakan zon waktu yang dipratentukan dalam Go termasuk langkah berikut: Import pakej "masa". Muatkan zon waktu tertentu melalui fungsi LoadLocation. Gunakan zon waktu yang dimuatkan dalam operasi seperti mencipta objek Masa, menghuraikan rentetan masa dan melaksanakan penukaran tarikh dan masa. Bandingkan tarikh menggunakan zon waktu yang berbeza untuk menggambarkan aplikasi ciri zon waktu yang telah ditetapkan.

Tutorial praktikal pembangunan rangka kerja Golang: Soalan Lazim Tutorial praktikal pembangunan rangka kerja Golang: Soalan Lazim Jun 06, 2024 am 11:02 AM

Soalan Lazim pembangunan rangka kerja Go: Pemilihan rangka kerja: Bergantung pada keperluan aplikasi dan pilihan pembangun, seperti Gin (API), Echo (boleh berskala), Beego (ORM), Iris (prestasi). Pemasangan dan penggunaan: Gunakan arahan gomod untuk memasang, mengimport rangka kerja dan menggunakannya. Interaksi pangkalan data: Gunakan perpustakaan ORM, seperti gorm, untuk mewujudkan sambungan dan operasi pangkalan data. Pengesahan dan kebenaran: Gunakan pengurusan sesi dan perisian tengah pengesahan seperti gin-contrib/sesi. Kes praktikal: Gunakan rangka kerja Gin untuk membina API blog ringkas yang menyediakan POST, GET dan fungsi lain.

See all articles