rpc: implement full bi-directional communication (#18471)
New APIs added: client.RegisterName(namespace, service) // makes service available to server client.Notify(ctx, method, args...) // sends a notification ClientFromContext(ctx) // to get a client in handler method This is essentially a rewrite of the server-side code. JSON-RPC processing code is now the same on both server and client side. Many minor issues were fixed in the process and there is a new test suite for JSON-RPC spec compliance (and non-compliance in some cases). List of behavior changes: - Method handlers are now called with a per-request context instead of a per-connection context. The context is canceled right after the method returns. - Subscription error channels are always closed when the connection ends. There is no need to also wait on the Notifier's Closed channel to detect whether the subscription has ended. - Client now omits "params" instead of sending "params": null when there are no arguments to a call. The previous behavior was not compliant with the spec. The server still accepts "params": null. - Floating point numbers are allowed as "id". The spec doesn't allow them, but we handle request "id" as json.RawMessage and guarantee that the same number will be sent back. - Logging is improved significantly. There is now a message at DEBUG level for each RPC call served.
Showing
- rpc/client.go 187 additions, 361 deletionsrpc/client.go
- rpc/client_test.go 60 additions, 85 deletionsrpc/client_test.go
- rpc/doc.go 51 additions, 31 deletionsrpc/doc.go
- rpc/errors.go 19 additions, 20 deletionsrpc/errors.go
- rpc/handler.go 397 additions, 0 deletionsrpc/handler.go
- rpc/http.go 43 additions, 31 deletionsrpc/http.go
- rpc/inproc.go 2 additions, 2 deletionsrpc/inproc.go
- rpc/ipc.go 10 additions, 6 deletionsrpc/ipc.go
- rpc/json.go 218 additions, 251 deletionsrpc/json.go
- rpc/json_test.go 0 additions, 178 deletionsrpc/json_test.go
- rpc/server.go 74 additions, 369 deletionsrpc/server.go
- rpc/server_test.go 99 additions, 109 deletionsrpc/server_test.go
- rpc/service.go 285 additions, 0 deletionsrpc/service.go
- rpc/stdio.go 4 additions, 16 deletionsrpc/stdio.go
- rpc/subscription.go 258 additions, 80 deletionsrpc/subscription.go
- rpc/subscription_test.go 106 additions, 213 deletionsrpc/subscription_test.go
- rpc/testdata/invalid-badid.js 7 additions, 0 deletionsrpc/testdata/invalid-badid.js
- rpc/testdata/invalid-batch.js 14 additions, 0 deletionsrpc/testdata/invalid-batch.js
- rpc/testdata/invalid-idonly.js 7 additions, 0 deletionsrpc/testdata/invalid-idonly.js
- rpc/testdata/invalid-nonobj.js 4 additions, 0 deletionsrpc/testdata/invalid-nonobj.js
Loading
Please register or sign in to comment