Maison > développement back-end > Golang > Comment puis-je accéder à un serveur HTTP Go à l'aide de JSON-RPC avec la bibliothèque standard ?

Comment puis-je accéder à un serveur HTTP Go à l'aide de JSON-RPC avec la bibliothèque standard ?

Linda Hamilton
Libérer: 2024-11-21 08:47:10
original
655 Les gens l'ont consulté

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

Accès JSON RPC au serveur HTTP à l'aide de la bibliothèque standard

JSON RPC est un protocole RPC qui utilise JSON comme format de données. Il permet aux clients de communiquer avec les serveurs via HTTP à l'aide de requêtes POST. La bibliothèque standard de Go fournit des packages pour l'implémentation de serveurs RPC, mais il n'existe actuellement aucune prise en charge directe pour JSON RPC.

Problème :

La configuration du serveur fournie utilise la norme Le package net/rpc de la bibliothèque, qui attend des clients qu'ils établissent une connexion CONNECT et envoient des requêtes JSON RPC via le flux. Il ne s'agit pas d'une approche courante ou compatible pour les applications Web.

Solution :

La solution à ce problème consiste à créer un gestionnaire HTTP personnalisé qui adapte le protocole HTTP demande/réponse à un ServerCodec. Cela permet au serveur de gérer les requêtes JSON RPC sur les requêtes 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)
})
Copier après la connexion

Implémentation :

Dans l'exemple d'extrait de code, un service CakeBaker est enregistré auprès du serveur . Le gestionnaire HTTP est ajouté au serveur HTTP et le serveur écoute sur le port 4321. Un client peut désormais envoyer une requête POST à ​​« http://localhost:4321/rpc » avec une charge utile de requête JSON RPC. Le serveur analysera la requête, exécutera la méthode correspondante et renverra le résultat dans la réponse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal