[ ホームページ ] [ 携帯用URL ]
将棋所のサポート掲示板
将棋所についての質問やバグ報告、USIエンジンの作成報告などに使用して下さい。

[ EZBBS.NET | 新規作成 | ランキング | オプション ]
iモード&(絵文字)、au対応!ケータイからも返信できる無料掲示板!
名前
 E-mail 
題名
内容
   タグ有効 改行有効 等幅フォント
URL
 



1075.テスト版3での不具合例  
名前:48    日付:2020/9/23(水) 10:46
常日頃お世話になっております。
また,テスト版3の作成ありがとうございます。
さっそくWiMAXルータにWiFi接続という二段に危ない回線でテストしてみました。
USIエンジン起動ミスなどでは次戦が戦えていますが,下記ログでYss1000kはAGREE後初手を指さずに時間切れしたようです。
こちらは初手を5分ほど待っている間に回線切れをしたようでTIMEOUTを知らずにずっと相手の指し手を待っている状態でした。
長考時に切れるケースも他にありますので明らかに切れ負けの場合も再接続という対応できませんでしょうか。

http://wdoor.c.u-tokyo.ac.jp/shogi/view/show-player.cgi?event=LATEST&filter=floodgate&show_self_play=1&user=test3_test



1078.Re: テスト版3での不具合例
名前:将棋所の作者    日付:2020/9/23(水) 23:45
確認ですが、切れ負けの場合というのは、サーバから#TIME_UPが送られてきて対局終了した、ということでしょうか(その場合、対局結果一覧を開くと、その対局のコメント欄には「時間切れ」と書いてあると思います)
あるいは、対局開始後、サーバから何も送られて来ない状態が続いて接続が切れてしまい、対局中のように見える状態が何時間もずっと続いたまま、ということでしょうか。
前者であれば、#TIME_UPが送られてきて対局終了した場合は再ログイン、というようにすれば対応できると思います。後者の場合、再ログインするきっかけになるイベントが何もないので、どのように再ログインするか、対策を考える必要があります。


1080.Re: テスト版3での不具合例
名前:48    日付:2020/9/24(木) 7:28
説明不足ですみません。
後者です。TIMEOUTを認識していません。
夜中に対戦させた場合朝に数万秒の超過になっていることが多々あります。
相手の持ち時間から計算して明らかに時間切れの場合は再接続できませんでしょうか?
つまり駆動イベントはタイマーです。

電竜戦運営で確認してみたところ相手が長考に入った状態で回線が切れているケースが多いようです。
AGREE後初手待ちもその類です。
floodgateでは相手番でもkeepaliveを受け付けるらしいのでそういう対応でも回避できるかもしれません。
手番側が長考で切れるケースは少ないようです。


1082.Re: テスト版3での不具合例
名前:将棋所の作者    日付:2020/9/25(金) 0:1
>floodgateでは相手番でもkeepaliveを受け付けるらしいのでそういう対応でも回避できるかもしれません。

それであれば、対局開始後であっても、指し手の送受信がない状態が続いたら1分ごとにKeepAliveを送る、ということにしようかと思います。そうすれば、対局が止まって接続が切れても、KeepAliveの送信に失敗したときに再ログインできます。その機能を入れたテスト版4を作ろうと思うのでしばらくお待ちください。
それでも駄目なら、明らかな時間切れの場合に再ログイン、というのを作ろうかと思います。


1086.Re: テスト版3での不具合例
名前:カツ丼将棋    日付:2020/9/26(土) 13:45
将棋所の作者様

テスト版3を使って各種テストを致しましたので簡単に共有致します。
https://golan.sakura.ne.jp/denryusen/dr1_test4a/dr1_live.php
(すぐ消しますが、、、)

●まずこれまで問題になっていた、Agree処理で不安定になって相手の回線が切られる件、これについては私の拙作プログラムに間違いがあって、本来コールされることのない緊急用の不安定な人を乗っ取ってBANさせるコードが常に呼ばれるようになっていました、、、つまるところ私のヘマでして今後は同様のことはほとんど起こらないです。お騒がせしました。。ただそのテストの過程で接続復帰がちゃんとワークしていることを確認しました。これは大変有用な機能です。

●対局中に、デザリングでつないでいたものを途中wifiにつなぎ返したソフトがあったのですが、そうすると両者の回線が切れてしまってたようで、サーバーはそれに気づかず接続状態と勘違いし、またクライアント側もずっと対戦が続いているものと勘違いしているような挙動があり、次のラウンドの対戦を始める過程でサーバーが気付いてサーバーも接続切れと判断。クライアント側はずっと対戦が続いている、、、というのがありました。これはテスト版4で解決すると思っておりますのでお待ちしております。

●不安定な回線でAgree待ちをしていると、サーバー側が対局条件を送ったつもりでもクライアント側に届いておらず、サーバー側はタイムアウトでREJECTするのですが、両者の思い違いのない作りにしないと思っておりますが、なかなか再現できないケースなのでもっといろいろ再現させてまた共有致します。


1088.Re: テスト版3での不具合例
名前:将棋所の作者    日付:2020/9/27(日) 23:54
先ほど、テスト版4を公開したので使ってみて下さい。


1089.Re: テスト版3での不具合例
名前:カツ丼将棋    日付:2020/9/29(火) 0:5
将棋所の作者様

テスト版4を公開していただきありがとうございました。
早速テストさせていただきました。

ケース1)持ち時間2時間にして、数手指して放置
 ⇒時間が切れてもサーバが反応しませんでした。再ログインしようにも将棋所からは接続が切れませんでしたので、×ボタンで強制終了させました。この際、待たされた方から先に落としました。片方だけ落としても、%%WHOするともう片方の方がゲーム状態で(これはおかしい状態)、それも×ボタンで落としてしまうとやっとサーバーが反応して、手番で時間を切らした方が負けるという、正しい勝敗が返ってきました。
これだと2時間長考したまま時間切れすると、サーバーがいつまでも対局状態となり、スイス式の大会の場合、次のラウンドに進めず大会運営が破綻します(真夜中の完全フルオートモードの場合)。


ケース2)持ち時間1時間にして、時間切れぎりぎりで手を指してみる
 ⇒正しく対局ができました。対局中のkeepaliveが効果を出していると思われます。

ケース3)サーバー側にtcp keepaliveを設定し、ケース1と同じく2時間放置
 ⇒ケース1と同じ症状。ここでは×で落とさずに手を指してみると、タイムアップが返ってきました。サーバのtcp keepaliveは効果が薄いように見えました。


以上のことから、ローカルタイムから計測して明らかに時間が切れている場合は再ログインする機能をするテスト版5をお願いできませんでしょうか?それで困っている問題はほぼ解決すると思っています。

 なお、対処しなければならない事象の優先度というのは、
不具合のため大会の進行が止まるケース >>> 不具合を起こした人のために対戦相手が以降不戦敗となるケース >>>>> 自分の不具合のため自分が以降不戦敗となるケース
と、考えております。


1090.Re: テスト版3での不具合例
名前:Mizar    日付:2020/9/29(火) 13:27
> ケース1)持ち時間2時間にして、数手指して放置

持ち時間1時間で3局ほど追試してみましたが、shogi-serverが指し手放置の時間切れを起こした対局について、#TIME_UPを返すタイミングが割と不定になっているため、多少の持ち時間超過では#TIME_UPを返してくれないように見える、という現象のように見受けられました。(それぞれ、持ち時間を約5分、約14分、約8分経過した時点でshogi-serverが#TIME_UPを返して対局打ち切り)

指し手放置の対局について切れ負けの通知#TIME_UPが遅れる件に関して、改修が必要なのはshogi-serverの側であるように見受けられます。


1092.Re: テスト版3での不具合例
名前:将棋所の作者    日付:2020/9/30(水) 23:19
> ケース1)持ち時間2時間にして、数手指して放置
 ⇒時間が切れてもサーバが反応しませんでした。

> ケース3)サーバー側にtcp keepaliveを設定し、ケース1と同じく2時間放置
 ⇒ケース1と同じ症状。ここでは×で落とさずに手を指してみると、タイムアップが返ってきました。

時間が切れた場合、すぐにサーバは適切なコマンドを送って対局を終了させる必要があります。それを送らないのであればサーバ側の問題になります。
サーバ通信対局において時間管理というのは全てサーバ側が行うので、クライアント側が時間切れかどうか判断することはありません。


1094.Re: テスト版3での不具合例
名前:Mizar    日付:2020/10/1(木) 11:48
テスト版4でshogi-serverでの対局中、着手放置で時間切れになった場合になかなかサーバ側が時間切れを検知できなかった件のついてですが、

https://osdn.net/projects/shogi-server/scm/git/shogi-server/blobs/master/shogi-server
では受信周りの処理が以下のようになっているようです。
```
# Return
# - a received string
# - :timeout
# - :exception
# - nil when a socket is closed
#
def gets_safe(socket, timeout=nil)
if r = select([socket], nil, nil, timeout)
return r[0].first.gets
else
return :timeout
end
rescue Exception => ex
log_error("gets_safe: #{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}")
return :exception
end
```

通常、この処理で60秒間受信が無かった場合は:timeoutを返し、時間切れの検出処理等を行っているようなのですが、これがテスト版4で対局が行われた際には60秒おきに空行を受け取り続けていたため、なかなか:timeoutが発生せずに時間切れの処理に入れていなかったと見られます。


1095.Re: テスト版3での不具合例
名前:Mizar    日付:2020/10/1(木) 11:57
カツ丼将棋さんによると、このshogi-serverの:timeout発生間隔を60秒から29秒に変更し試してみるとの事です。


1096.Re: テスト版3での不具合例
名前:カツ丼将棋    日付:2020/10/1(木) 12:33
Mizarさんの書き込みにあります通り、事象の原因がはっきりしました。
電竜戦サーバ側のDefult_timeoutを60秒から28秒にしたところ、すべてうまくいきました!

本件について、我々としてはこの対応で困ることはありません。
ただfloodgateを始めとしたほかのshogi-server側の設定がどうしているかわからないところですが、KeepAliveをDefault_timeoutと同じ設定にすると不安定になってしまうわけですが、クライアントの設定がどうであれ、サーバ側がタイムアウトを検知して送信すべきことですので、shogi-server側の開発者様に状況を報告しておきます。


1099.Re: テスト版3での不具合例
名前:Mizar    日付:2020/10/19(月) 21:1
https://osdn.net/projects/shogi-server/ticket/40821#comment:1877:40821:1601821869

shogi-serverのプロジェクトの方に報告はしていますが、テスト版4での「半角空白+改行文字」を定期的に送る動作に対する対策と対応はまだされていないようです。(時間切れ負けで着手放置が続いた際、テスト版4でのKeepAliveが行われていると対局サーバが時間切れを検出できず、永遠に対局状態が続く可能性がある)

一応、floodgateにテスト版4で接続する際には注意が必要かもしれません。

「1075.テスト版3での不具合例」への返信

無料アクセス解析

アクセス解析の決定版!無料レンタルで最大100ページ解析!

   投稿KEY
   パスワード

EZBBS.NET produced by InsideWeb