Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyesuaikan rpc dalam golang

Bagaimana untuk menyesuaikan rpc dalam golang

WBOY
WBOYasal
2023-05-13 10:36:38676semak imbas

Golang ialah bahasa pengaturcaraan yang sangat popular, ia digemari oleh pembangun kerana ciri-cirinya yang cekap tinggi, tinggi dan mudah dipelajari. RPC (Remote Procedure Call) adalah teknologi yang sangat diperlukan dalam melaksanakan sistem teragih, dan Golang juga mempunyai sokongan yang baik untuk pelaksanaan RPC. Dalam artikel ini, kami akan memperkenalkan cara membuat panggilan RPC dan menganalisis proses panggilan di Golang.

Apakah itu RPC?

Pertama, kita perlu memahami apa itu RPC. RPC ialah protokol komunikasi rangkaian yang membenarkan program memanggil subrutin pada program lain tanpa mengetahui butiran rangkaian asas. Dalam istilah orang awam, ini bermakna memanggil perkhidmatan jauh sama seperti memanggil fungsi setempat, dan rangka kerja RPC akan merangkum semua kerja bersiri dan penyahsirilan permintaan dan respons. RPC biasanya dilaksanakan menggunakan protokol lapisan pengangkutan TCP atau UDP untuk menyokong penghantaran data yang boleh dipercayai dan perkhidmatan penamaan antara terminal.

Cara memanggil RPC di Golang

Di Golang, kita boleh menggunakan pakej net/rpc dalam perpustakaan standard untuk melaksanakan panggilan RPC. Pertama, kita perlu mentakrifkan antara muka perkhidmatan dan kaedah RPC, contohnya:

type MathService struct {
}

func (m *MathService) Add(args *[]int, reply *int) error {
    sum := 0
    for _, value := range *args {
        sum += value
    }
    *reply = sum
    return nil
}

Dalam contoh ini, kami mentakrifkan perkhidmatan MathService, di mana kaedah Tambah digunakan untuk mengira jumlah semua integer dalam parameter dan kembalikan hasilnya kepada pemanggil. Parameter pertama kaedah ialah penunjuk hirisan integer, dan parameter kedua ialah penunjuk integer yang digunakan untuk menyimpan hasil pulangan kaedah. Nilai pulangan kaedah ialah jenis ralat, digunakan untuk menunjukkan sama ada pelaksanaan kaedah berjaya.

Seterusnya, kami perlu mendaftarkan perkhidmatan pada pelayan RPC dan mulakan pelayan:

mathService := new(MathService)
rpc.Register(mathService)
listener, err := net.Listen("tcp", ":8888")
if err != nil {
    log.Fatal("Listen error: ", err)
}
rpc.Accept(listener)

Dalam contoh ini, kami mendaftar perkhidmatan MathService pada pelayan RPC dan menentukan port mendengar Nombor ialah 8888. Selepas memulakan pelayan, kami boleh berkomunikasi dengannya dari jauh dengan memanggil kaedah rpc.Dial():

client, err := rpc.Dial("tcp", "localhost:8888")
if err != nil {
    log.Fatal("Dial error: ", err)
}

Selepas mendapatkan klien RPC, kami boleh memanggil kaedah yang ditakrifkan oleh pelayan:

args := []int{1, 2, 3, 4, 5}
var reply int
err = client.Call("MathService.Add", &args, &reply)
if err != nil {
    log.Fatal("Call error: ", err)
}
fmt.Println("result:", reply)

Dalam contoh ini, kami mentakrifkan set argumen parameter, yang akan digunakan sebagai parameter input kaedah Tambah. Kami menggunakan kaedah client.Call() untuk memanggil kaedah Tambah pada bahagian pelayan dan menghantar parameter input dan parameter output kepadanya. Jika panggilan berjaya, kaedah akan mengembalikan sifar jika tidak, objek ralat yang mewakili mesej ralat akan dikembalikan. Akhir sekali, kami mencetak nilai pulangan kaedah, iaitu hasil tambah integer.

Analisis proses panggilan RPC

Apabila membuat panggilan RPC, kita perlu memahami prinsip asas panggilan RPC. Apabila kami memanggil perkhidmatan RPC, pelanggan akan menghantar permintaan kepada pelayan RPC, dan rangka kerja RPC akan menyerikan permintaan ke dalam data binari dan menghantarnya ke pelayan. Selepas pelayan menerima permintaan, ia menyahsiri data ke dalam parameter fungsi dan melaksanakan fungsi, dan menyerikan hasil pelaksanaan fungsi ke dalam data binari dan menghantarnya kembali kepada klien. Selepas menerima respons daripada pelayan, pelanggan menyahsiri data ke dalam nilai pulangan fungsi.

Dalam proses ini, operasi bersiri dan penyahseriran diperlukan. Pensirian biasanya menggunakan JSON, Protobuf dan format lain, dan klien serta pelayan perlu menggunakan format bersiri yang sama. Apabila membuat panggilan RPC, pelanggan dan pelayan juga perlu melakukan operasi bersiri yang sama untuk memastikan ketepatan data binari.

Selain itu, semasa membuat panggilan RPC, perkhidmatan jauh dan nama kaedah yang hendak dipanggil perlu jelas, yang biasanya diluluskan sebagai sebahagian daripada parameter panggilan. Selain itu, pelayan juga perlu mendaftar perkhidmatan RPC dan mendengar nombor port yang sepadan untuk menerima permintaan daripada pelanggan.

Ringkasan

Dalam artikel ini, kami memperkenalkan kaedah asas untuk memanggil RPC di Golang dan analisis proses panggilan. RPC ialah teknologi sistem teragih yang sangat penting Pustaka standard Golang menyokong RPC dengan sangat baik, menjadikannya sangat mudah untuk melaksanakan panggilan RPC. Pada masa yang sama, kami juga perlu memberi perhatian kepada isu bersiri dan penyahserikatan semasa proses panggilan RPC, serta operasi pendaftaran dan pemantauan pelayan. Jika anda ingin mempunyai pemahaman yang lebih mendalam tentang cara menggunakan RPC di Golang, adalah disyorkan agar anda membaca dengan lebih lanjut dokumentasi pakej net/rpc di Golang.

Atas ialah kandungan terperinci Bagaimana untuk menyesuaikan rpc dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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