2017-07-07 8 views
0

Golangに組み込まれているJSON-RPCサーバーを使用するプログラムのシャットダウンハンドラを作成していますが、問題が発生しました。あなたはそれを手伝ってもらえますか?シャットダウン時のGolang JSON-RPCサーバーコントロール

私は接続の受け入れを中止し、既存の接続の着信要求を受け入れないようにします(エラーを送信して、真)。私は制御できない瞬間を持っているか、少なくとも、制御方法はわかりません。

質問は次のとおりです。

私は既存の接続のexisiting要求の結果は、ビルトインJSON-RPCサーバーGolangののクライアントに与えられていることを保証するにはどうすればよいですか?

RPCメソッドを呼び出す構造体を制御したいが、それは自分のコードにはない。例えば、私はRPCアクション 'User.Get'を持っています。私は制御する 'Get'という名前の関数を持っています。この 'Get'機能を起動するコードをどのように制御できますか? GoogleのRPCサーバーを変更する必要がありますか、それとも効果的な方法がありますか?

おそらく、処理中のアクティブな要求の数を保持するRPCサーバーにいくつかの変数がありますか?

NumCalls()およびnumCallsは、​​で、https://golang.org/src/net/rpc/server.goです。問題は、このフィールドが公開されていないことです...さらに、.../rpc/server.goは、コンパイルしないsync.Mapを使用します。ゴランの私のバージョンは古すぎますか? :)

今のところ最も簡単な方法は、すべてのRPCアクション関数からグローバルカウンタを操作することです。あなたがより良い解決策を知っていれば、教えてください。ありがとう。 :-)

答えて

0

net/rpc godocの例では、グローバルデフォルトを使用する方法を示しています。代わりに独自のrpcおよびhttpサーバーインスタンスを作成します。

import "net/rpc" 
import "net/http" 

rpcServer := rpc.NewServer() 
// rpc stuff 
httpServer := &http.Server{ 
    Handler: rpcServer, 
} 
// graceful shutdown stuff 

グレースフルシャットダウンの場合、いくつかのパッケージがあります。私はこのことを知っています。

関連する問題