Golang JSON-关机时的 RPC 服务器控制
Golang JSON-RPC Server Control at Shutdown
我正在为一个使用 Golang 内置 JSON-RPC 服务器的程序编写一个关闭处理程序,但我遇到了困难。你能帮我吗?
我停止接受传入的连接,停止接受现有连接的传入请求(发送错误,这是真的)但我有一个我无法控制的时刻,或者至少,我不知道如何控制。
问题是:
如何保证将现有连接的现有请求的结果提供给 Golang 内置 JSON-RPC 服务器的客户端?
我想控制调用 RPC 方法的结构,但它不在我的代码中。例如,我有一个 RPC 操作 'User.Get'。我有一个名为 'Get' 的函数,由我控制。如何控制启动此 'Get' 函数的代码?我必须修改 Google 的 RPC 服务器还是有更有效的方法?
也许,RPC 服务器中有一些变量保存正在处理的活动请求数?
我在 https://golang.org/src/net/rpc/server.go
中的 methodType
中看到 NumCalls()
和 numCalls
。问题是这个字段不是 public... 而且,.../rpc/server.go
使用不编译的 sync.Map
。我的 Golang 版本太旧? :)
目前看来,最简单的方法是从所有 RPC 操作函数中操作全局计数器。 :-) 如果您知道更好的解决方案,请告诉我。谢谢。 :-)
在net/rpc
godoc示例中,它只是展示了如何使用全局默认值。而是创建您自己的 rpc 和 http 服务器实例。
import "net/rpc"
import "net/http"
rpcServer := rpc.NewServer()
// rpc stuff
httpServer := &http.Server{
Handler: rpcServer,
}
// graceful shutdown stuff
为了正常关机,有几个包。我知道这个。
我正在为一个使用 Golang 内置 JSON-RPC 服务器的程序编写一个关闭处理程序,但我遇到了困难。你能帮我吗?
我停止接受传入的连接,停止接受现有连接的传入请求(发送错误,这是真的)但我有一个我无法控制的时刻,或者至少,我不知道如何控制。
问题是:
如何保证将现有连接的现有请求的结果提供给 Golang 内置 JSON-RPC 服务器的客户端?
我想控制调用 RPC 方法的结构,但它不在我的代码中。例如,我有一个 RPC 操作 'User.Get'。我有一个名为 'Get' 的函数,由我控制。如何控制启动此 'Get' 函数的代码?我必须修改 Google 的 RPC 服务器还是有更有效的方法?
也许,RPC 服务器中有一些变量保存正在处理的活动请求数?
我在 https://golang.org/src/net/rpc/server.go
中的 methodType
中看到 NumCalls()
和 numCalls
。问题是这个字段不是 public... 而且,.../rpc/server.go
使用不编译的 sync.Map
。我的 Golang 版本太旧? :)
目前看来,最简单的方法是从所有 RPC 操作函数中操作全局计数器。 :-) 如果您知道更好的解决方案,请告诉我。谢谢。 :-)
在net/rpc
godoc示例中,它只是展示了如何使用全局默认值。而是创建您自己的 rpc 和 http 服务器实例。
import "net/rpc"
import "net/http"
rpcServer := rpc.NewServer()
// rpc stuff
httpServer := &http.Server{
Handler: rpcServer,
}
// graceful shutdown stuff
为了正常关机,有几个包。我知道这个。