I am writing a Shutdown Handler for a Program which uses Golang's built-in JSON-RPC Server and I have faced a difficulty. Could you help me with it?
I stop accepting incomming Connections, stop accepting incoming Requests for existing Connections (send an Error, to be true) but I have a Moment which I can not control or, at least, I do not know how to control.
The Question is:
How do I guarantee that Results of exisiting Requests of existing Connections are given to Clients of Golang's built-in JSON-RPC Server?
I want to control that Structure which calls RPC Methods, but it is not in my Code. For Example, I have an RPC Action 'User.Get'. I have a function named 'Get' which I control. How do I control the Code which starts this 'Get' function? Do I have to modify Google's RPC Server or is there any more effecient way?
Maybe, there is some Variable in RPC Server which holds the Number of active Requests being processed?
I see a NumCalls()
and numCalls
in the methodType
in https://golang.org/src/net/rpc/server.go
. The Problem is that this Field is not public... Moreover, the .../rpc/server.go
uses sync.Map
which does not compile. My Version of Golang is too old? :)
Seems that for now the easiest Way is to manipulate a global Counter from all the RPC Action Functions. :-) If you know a better Solution, please, tell me. Thanks. :-)