Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan rpc di golang

Bagaimana untuk melaksanakan rpc di golang

PHPz
PHPzasal
2023-04-25 10:44:371764semak imbas

Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet, sistem yang diedarkan telah menarik lebih banyak perhatian. Teknologi RPC (Remote Procedure Call) ialah teknologi utama dalam sistem teragih, yang membolehkan sistem berbeza berkomunikasi dan bekerjasama antara satu sama lain. Di antara bahasa yang berbeza, kebanyakan bahasa mempunyai rangka kerja RPC mereka sendiri. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang untuk melaksanakan RPC supaya sistem boleh bekerjasama dengan gembira.

1. Konsep asas RPC

1.1 Apakah itu

RPC ialah Panggilan Prosedur Jauh, yang bermaksud bahawa pelanggan memanggil perkhidmatan jauh secara setempat , sama seperti membuat panggilan kod asli, dan boleh lulus parameter dan mendapatkan nilai pulangan sama seperti memanggil kod asli. Ia sebenarnya mengabstrak proses komunikasi rangkaian ke dalam corak yang serupa dengan panggilan tempatan.

1.2. Mengapa

Dalam sistem teragih, setiap nod tersebar dan masing-masing menjalankan tugas atau perkhidmatan perniagaan yang berbeza. Untuk nod ini berfungsi bersama, mereka perlu berkomunikasi melalui rangkaian. RPC membenarkan nod ini bertukar data melalui rangkaian untuk melaksanakan pelaksanaan logik perniagaan.

1.3. Ciri-ciri

Prinsip teras RPC adalah untuk mengabstrak proses komunikasi rangkaian ke dalam proses panggilan tempatan dan kemudian Kembalikan hasil pemprosesan kepada pelanggan. Ini membolehkan pelbagai nod dalam sistem teragih bekerjasama antara satu sama lain untuk menyelesaikan pelbagai tugas sistem teragih. Ciri-ciri RPC adalah seperti berikut:

  • Abstraksi: Proses komunikasi rangkaian disarikan ke dalam proses panggilan tempatan, supaya pembangun yang menggunakan rangka kerja RPC boleh menggunakan perkhidmatan jauh seperti perkhidmatan tempatan.
  • Ketelusan: RPC melindungi kebanyakan butiran berkaitan komunikasi untuk pengguna, membolehkan pembangun menumpukan lebih pada logik perniagaan.
  • Cekap: RPC menggunakan perduaan untuk menghantar data, dengan kecekapan bersiri dan penyahserilan yang tinggi serta kelajuan penghantaran yang cepat Ia boleh menghantar sejumlah besar data apabila lebar jalur rangkaian adalah kecil.

2. Langkah asas untuk Golang melaksanakan RPC

2.1 Tentukan antara muka

Di Golang, anda perlu menentukan antara muka yang akan didedahkan antara muka adalah bersamaan dengan prototaip Fungsi untuk panggilan jauh.

type Server struct {}

type Args struct {
    A, B int
}

func (s *Server) Multiply(args *Args, reply *int) error {
    *reply = args.A * args.B
    return nil
}

Dalam kod, struktur Pelayan dan struktur Args ditakrifkan Struktur Pelayan mentakrifkan fungsi Darab digunakan untuk mengira hasil darab dua integer. Perlu diingatkan bahawa parameter dan nilai pulangan fungsi Multiply mesti memenuhi spesifikasi RPC.

2.2. Daftar perkhidmatan RPC

Selepas menentukan antara muka, anda perlu mendaftarkan antara muka ke dalam perkhidmatan RPC supaya pelanggan boleh menghubungi perkhidmatan RPC. Untuk mendaftarkan perkhidmatan kepada pelayan RPC, kita perlu menggunakan fungsi rpc.Serve() di Golang.

func main() {
    server := new(Server)
    rpc.Register(server)
    rpc.HandleHTTP()

    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal("listen error:", err)
    }

    http.Serve(listener, nil)
}

Dalam kod di atas, kami mula-mula mencipta struktur Pelayan, dan kemudian mendaftarkan antara muka yang ditakrifkan dalam struktur Pelayan kepada pelayan RPC melalui fungsi rpc.Daftar, dan kemudian gunakan rpc.HandleHTTP( ) Ikat pelayan RPC ke mux lalai dalam pakej http, dan akhirnya ikat pelayan RPC ke alamat pendengaran TCP melalui http.Serve.

2.3. Tulis kod pelanggan

Apabila pendaftaran perkhidmatan RPC selesai, kami perlu menulis kod pelanggan untuk menghubungi perkhidmatan RPC. Pakej rpc Golang menyediakan fungsi rpc.DialHTTP, yang boleh digunakan untuk mewujudkan sambungan klien RPC. Berikut ialah pelaksanaan klien RPC yang mudah:

func main() {
    client, err := rpc.DialHTTP("tcp", "localhost:8080")
    if err != nil {
        log.Fatal("dialing:", err)
    }

    args := &Args{7, 8}
    var reply int
    err = client.Call("Server.Multiply", args, &reply)
    if err != nil {
        log.Fatal("Server error:", err)
    }

    fmt.Printf("Multiply: %d*%d=%d", args.A, args.B, reply)
}

Pelanggan mewujudkan sambungan dengan pelayan RPC melalui fungsi rpc.DialHTTP, dan kemudian memanggil kaedah klien.Panggilan untuk melaksanakan fungsi pelayan RPC. Parameter pertama Panggilan ialah nama fungsi yang akan dipanggil, parameter kedua ialah parameter fungsi, dan parameter ketiga ialah nilai pulangan fungsi.

3. Kod contoh RPC Golang

Berikut ialah contoh lengkap pelaksanaan RPC berdasarkan Golang:

package main

import (
    "fmt"
    "log"
    "net"
    "net/http"
    "net/rpc"
)

type Server struct{}

type Args struct {
    A, B int
}

func (s *Server) Multiply(args *Args, reply *int) error {
    *reply = args.A * args.B
    return nil
}

func main() {
    server := new(Server)
    rpc.Register(server)
    rpc.HandleHTTP()

    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal("listen error:", err)
    }

    go http.Serve(listener, nil)

    client, err := rpc.DialHTTP("tcp", "localhost:8080")
    if err != nil {
        log.Fatal("dialing:", err)
    }

    args := &Args{7, 8}
    var reply int
    err = client.Call("Server.Multiply", args, &reply)
    if err != nil {
        log.Fatal("Server error:", err)
    }

    fmt.Printf("Multiply: %d*%d=%d", args.A, args.B, reply)
}

Melalui kod di atas, kita boleh lihat , dalam Golang, melaksanakan RPC adalah mudah. Anda hanya perlu menentukan antara muka, mendaftar perkhidmatan RPC dan menulis kod klien. Sudah tentu, kedua-dua pelanggan dan pelayan RPC boleh menjadi heterogen, yang sangat berguna apabila menskalakan sistem teragih.

4. Ringkasan

Artikel ini memperkenalkan apa itu RPC, sebab RPC diperlukan dan cara menggunakan Golang untuk melaksanakan RPC. Dengan membaca artikel ini, kita dapat memahami bahawa RPC digunakan secara meluas dan merupakan teknologi asas dalam sistem teragih. Sebagai bahasa pengaturcaraan yang cekap, Golang mempunyai rangka kerja RPC yang sangat baik yang boleh membantu pembangun melaksanakan sistem teragih dengan lebih baik. Jika anda perlu membangunkan sistem teragih, anda juga boleh cuba menggunakan Golang untuk melaksanakan RPC.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan rpc di 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