From 3e62eaf722e206f589511a4d63f987e8ee4c4aec Mon Sep 17 00:00:00 2001 From: Yoshida Hiroshi Date: Mon, 4 Mar 2024 17:13:23 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AA=E3=83=88=E3=83=A9=E3=82=A4=E9=96=93?= =?UTF-8?q?=E9=9A=94=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.go | 11 ++++++++++- config_example.ini | 2 ++ handler.go | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/config.go b/config.go index cd06cac..45e47e8 100644 --- a/config.go +++ b/config.go @@ -27,6 +27,9 @@ const ( // 100ms DefaultTimeToWaitForOpusPacketMs = 100 + + // リトライ間隔 100ms + DefaultRetryIntervalMs = 100 ) type Config struct { @@ -46,7 +49,8 @@ type Config struct { HTTP2MaxReadFrameSize uint32 `ini:"http2_max_read_frame_size"` HTTP2IdleTimeout uint32 `ini:"http2_idle_timeout"` - MaxRetry int `ini:"max_retry"` + MaxRetry int `ini:"max_retry"` + RetryIntervalMs int `ini:"retry_interval_ms"` ExporterHTTPS bool `ini:"exporter_https"` ExporterListenAddr string `ini:"exporter_listen_addr"` @@ -159,6 +163,10 @@ func setDefaultsConfig(config *Config) { if config.TimeToWaitForOpusPacketMs == 0 { config.TimeToWaitForOpusPacketMs = DefaultTimeToWaitForOpusPacketMs } + + if config.RetryIntervalMs == 0 { + config.RetryIntervalMs = DefaultRetryIntervalMs + } } func validateConfig(config *Config) error { @@ -209,4 +217,5 @@ func ShowConfig(config *Config) { zlog.Info().Int("exporter_listen_port", config.ExporterListenPort).Msg("CONF") zlog.Info().Int("max_retry", config.MaxRetry).Msg("CONF") + zlog.Info().Int("retry_interval_ms", config.RetryIntervalMs).Msg("CONF") } diff --git a/config_example.ini b/config_example.ini index fa51d2f..90ee00d 100644 --- a/config_example.ini +++ b/config_example.ini @@ -46,6 +46,8 @@ dump_file = ./dump.jsonl # サーバからの切断時またはハンドラー個別で指定した条件でのリトライ回数を指定します max_retry = 0 +# リトライ間隔(ミリ秒)です +retry_interval_ms = 100 # aws の場合は IsPartial が false, gcp の場合は IsFinal が true の場合の最終的な結果のみを返す指定 final_result_only = true diff --git a/handler.go b/handler.go index 6ef58c3..e2bd6d0 100644 --- a/handler.go +++ b/handler.go @@ -154,6 +154,9 @@ func (s *Server) createSpeechHandler(serviceType string, onResultFunc func(conte Int("retry_count", retryCount). Send() + // 連続のリトライを避けるために少し待つ + time.Sleep(time.Duration(s.config.RetryIntervalMs) * time.Millisecond) + // リトライ対象のエラーのため、クライアントとの接続は切らずにリトライする continue } @@ -194,6 +197,9 @@ func (s *Server) createSpeechHandler(serviceType string, onResultFunc func(conte Str("connection_id", h.SoraConnectionID). Int("retry_count", retryCount). Send() + + // TODO: 必要な場合は連続のリトライを避けるために少し待つ処理を追加する + break } else { // サーバから切断されたが再接続させない設定の場合