Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mengakses Pelayan HTTP Go Menggunakan JSON-RPC dengan Perpustakaan Standard?

Bagaimanakah Saya Boleh Mengakses Pelayan HTTP Go Menggunakan JSON-RPC dengan Perpustakaan Standard?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 08:47:10610semak imbas

How Can I Access a Go HTTP Server Using JSON-RPC with the Standard Library?

Akses JSON RPC ke Pelayan HTTP menggunakan Pustaka Standard

JSON RPC ialah protokol RPC yang menggunakan JSON sebagai format datanya. Ia membolehkan pelanggan berkomunikasi dengan pelayan melalui HTTP menggunakan permintaan POST. Pustaka standard dalam Go menyediakan pakej untuk melaksanakan pelayan RPC, tetapi pada masa ini tiada sokongan langsung untuk JSON RPC.

Masalah:

Persediaan pelayan yang disediakan menggunakan standard pakej net/rpc perpustakaan, yang menjangkakan pelanggan mewujudkan sambungan CONNECT dan menghantar permintaan RPC JSON melalui strim. Ini bukan pendekatan biasa atau serasi untuk aplikasi menghadap web.

Penyelesaian:

Penyelesaian kepada masalah ini ialah dengan mencipta pengendali HTTP tersuai yang menyesuaikan HTTP permintaan/tindak balas kepada ServerCodec. Ini membolehkan pelayan mengendalikan permintaan JSON RPC berbanding permintaan POST:

import (
    "bytes"
    "io"
    "net/http"
    "net/rpc"
    "net/rpc/jsonrpc"
)

type HttpConn struct {
    in  io.Reader
    out io.Writer
}

func (c *HttpConn) Read(p []byte) (n int, err error)  { return c.in.Read(p) }
func (c *HttpConn) Write(d []byte) (n int, err error) { return c.out.Write(d) }
func (c *HttpConn) Close() error                      { return nil }

http.HandleFunc("/rpc", func(w http.ResponseWriter, r *http.Request) {
    serverCodec := jsonrpc.NewServerCodec(&HttpConn{in: r.Body, out: w})
    w.Header().Set("Content-type", "application/json")
    w.WriteHeader(200)
    server.ServeRequest(serverCodec)
})

Pelaksanaan:

Dalam coretan kod contoh, perkhidmatan CakeBaker didaftarkan dengan pelayan . Pengendali HTTP ditambahkan pada pelayan HTTP dan pelayan mendengar pada port 4321. Pelanggan kini boleh menghantar permintaan POST ke "http://localhost:4321/rpc" dengan muatan permintaan JSON RPC. Pelayan akan menghuraikan permintaan, melaksanakan kaedah yang sepadan dan mengembalikan hasilnya dalam respons.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Pelayan HTTP Go Menggunakan JSON-RPC dengan Perpustakaan Standard?. 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