rpc: Support specifying HTTP client in RPC dialing (#15836)

* rpc: Support specifying HTTP client in RPC dialing

Adds a minimal interface that captures http.Client and adds a new method
rpc.DialHTTPClient that takes a client using that interface. The existing
rpc.DialHTTP method is then alternatively implemented by using the new
rpc.DialHTTPClient method provided with a standard *http.Client.

* rpc: fix minor doc typos
This commit is contained in:
Steven Roose 2018-01-24 09:59:15 +01:00 committed by Péter Szilágyi
parent 5c83a4e5dd
commit 952482d5e4

@ -65,8 +65,9 @@ func (hc *httpConn) Close() error {
return nil return nil
} }
// DialHTTP creates a new RPC clients that connection to an RPC server over HTTP. // DialHTTPWithClient creates a new RPC client that connects to an RPC server over HTTP
func DialHTTP(endpoint string) (*Client, error) { // using the provided HTTP Client.
func DialHTTPWithClient(endpoint string, client *http.Client) (*Client, error) {
req, err := http.NewRequest(http.MethodPost, endpoint, nil) req, err := http.NewRequest(http.MethodPost, endpoint, nil)
if err != nil { if err != nil {
return nil, err return nil, err
@ -76,10 +77,15 @@ func DialHTTP(endpoint string) (*Client, error) {
initctx := context.Background() initctx := context.Background()
return newClient(initctx, func(context.Context) (net.Conn, error) { return newClient(initctx, func(context.Context) (net.Conn, error) {
return &httpConn{client: new(http.Client), req: req, closed: make(chan struct{})}, nil return &httpConn{client: client, req: req, closed: make(chan struct{})}, nil
}) })
} }
// DialHTTP creates a new RPC client that connects to an RPC server over HTTP.
func DialHTTP(endpoint string) (*Client, error) {
return DialHTTPWithClient(endpoint, new(http.Client))
}
func (c *Client) sendHTTP(ctx context.Context, op *requestOp, msg interface{}) error { func (c *Client) sendHTTP(ctx context.Context, op *requestOp, msg interface{}) error {
hc := c.writeConn.(*httpConn) hc := c.writeConn.(*httpConn)
respBody, err := hc.doRequest(ctx, msg) respBody, err := hc.doRequest(ctx, msg)