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!