JSON RPC 표준 라이브러리를 사용하여 HTTP 서버에 액세스
JSON RPC는 JSON을 데이터 형식으로 사용하는 RPC 프로토콜입니다. 이를 통해 클라이언트는 POST 요청을 사용하여 HTTP를 통해 서버와 통신할 수 있습니다. Go의 표준 라이브러리는 RPC 서버 구현을 위한 패키지를 제공하지만 현재 JSON RPC에 대한 직접적인 지원은 없습니다.
문제:
제공된 서버 설정은 표준을 사용합니다. 클라이언트가 CONNECT 연결을 설정하고 스트림을 통해 JSON RPC 요청을 보낼 것으로 예상하는 라이브러리의 net/rpc 패키지. 이는 웹 연결 애플리케이션에 대한 일반적이거나 호환 가능한 접근 방식이 아닙니다.
해결책:
이 문제에 대한 해결책은 HTTP를 적용하는 사용자 정의 HTTP 처리기를 만드는 것입니다. ServerCodec에 대한 요청/응답. 이를 통해 서버는 POST 요청을 통해 JSON RPC 요청을 처리할 수 있습니다.
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) })
구현:
예제 코드 조각에서 CakeBaker 서비스가 서버에 등록됩니다. . HTTP 핸들러가 HTTP 서버에 추가되고 서버는 포트 4321에서 수신 대기합니다. 이제 클라이언트는 JSON RPC 요청 페이로드를 사용하여 "http://localhost:4321/rpc"에 POST 요청을 보낼 수 있습니다. 서버는 요청을 구문 분석하고 해당 메소드를 실행한 후 응답으로 결과를 반환합니다.
위 내용은 표준 라이브러리와 함께 JSON-RPC를 사용하여 Go HTTP 서버에 어떻게 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!