くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | プログラム | | 模型]

2011-09-19

_ 日記

作業してた以外にもいろいろあったんだが書き忘れてる。

ちょっと前にPC組んだ。mini-ITXでA3-3850ですよ。mini-ITXのわりにケースはでかい。なんだかんだ言ってLlano十分速いじゃないですか。これでしばらく不満はなさげ。快適なのはSSDをメインドライブにしてるのが大きいだろうけどなー。

内蔵GPUのパフォーマンスは結局のところどんなもんかと試そうとしたけど特に重いゲーム持ってない。Minecraft動かしてみたけどこれiMacでも重いと思わなかったしな。そういやDiRT3がもらえるってんだった。クーポンコードを入力してみたらコード漏洩事件があったおかげかクーポン自体をスキャンするか写真に撮ってアップロードしろとか言われた。すごい対策だな。めんどいけど手元にカメラがあったので撮って上げたら、確認できたらメールでダウンロードコード送るね、と出てきた。あ、これもしかして人手で確認してんのか。そうならざるをえないとは思うが、よくやるなぁ。 ……3日たってもダウンロードコードはおろか返事すら来ない。なんでだ。

そういやこれOpenGL4.x系のマシンになったわけか。いやーてっせれーたとか難しくてつかえねーよー。

_ PeerCastStation日記

だいたい安定してると思ったんだがまだうまくいかないところがあるなぁ。

またMac版のGUIがー。何をクリックしても無反応になってしまうんだが、バックグラウンドのスレッドは動いてそうに見える。MonoDevelopでデバッグ起動してるんで中断してみるが、中断しようとしたMonoDevelopごと固まってしまう。こまる。

原因は不明だが再現方法はわかって、Spacesで表示されているデスクトップを切り替えるだけだった。しかしGUIがデスクトップ1に表示されてるときは切り替えても大丈夫だった。デスクトップ3にあると切り替えて戻った時にはもう無反応になってしまう。もうやだこのWindows.Forms。

あとMac版のWindows.Forms、TextBoxに貼り付けがどうやっても効かない。Pasteは選べるんだが貼り付かねー。やくたたねー。

WindowsでもGUIが(?)不安定な模様。配信してたらしばらくして固まってしまった。そのあと配信も止まっちゃった模様。これもVisualStudioでデバッグ実行してたので中断してみるが、中断しようとしたVisualStudioごと固まってしまう。こまる。こいつはPeerCastStationを殺したらVisualStudioは中断できませんとかいって動き出したからよかったものの。

原因も再現方法も不明なんだが、GUIが固まってるんじゃないかという予感がある。デッドロックしてるとかはありうるんだが、VisualStudioで中断もできないデッドロックってのもすごいよな。GUIを除くとあとはスレッド立てて通信してるだけだし全部マネージドなので中断できない程のことが起きるとは思えない。ということで一番怪しいのはWindows.Formsだ。ウィンドウメッセージ処理中にどっかいっちゃった的なそんな話なんじゃないかなぁと。

TreeViewで作ってるリレーツリーが怪しいかもしれないとなんとなく思ったのでツリーの更新処理を消してみた。それからはしばらく配信してても止まることなく動いてたけど、原因も再現方法もわからんことにはどうだろうね、ほんとにTreeViewなんだろうかねとしか言いようがない。

配信してる間につながらなくなったーと言われた。そうは言ってもログを見ても新たにつなぎに来てる気配がないのでリレーが詰まってるわけでもないようだ。しかしつながらんとか。なんだろう。

ずっとわからないでいたんだけど、YPに載ってるIPアドレスが127.0.0.1になってるよと教えてもらった。そりゃつながんねーよ!しかし既につながってる人がいるということは最初はちゃんとしたグローバルアドレスが載ってたはずで、一体どういうタイミングで変わっちゃったんだ。そんなことをもう一回やらかしたがあとは無事に上手くいけてたようだ。

あとから調べてみたが不意に自分のグローバルアドレスを忘れるとかいうことは無さそうだ。そんなことになるコードは全く無かった。ということは正当なアドレスとして127.0.0.1をわざわざ設定してるということだな。というところまで考えてわかった。そういや配信中、手元でYP作成しててローカルYPに別な配信載せてたんだ。その時にローカルYPがお前のグローバルIPは127.0.0.1だよと教えてくれるんで、はいはいそうですかと覚えておいて以後自分のアドレス申告するときに127.0.0.1を渡していたようだ。

これはどうしたものか。動作としては間違ってはない。本家PeerCastだとお前のグローバルIPはこれだと渡されても信用できる相手からの渡されたものじゃないと自分のアドレスとして保持しないがPeerCastStationでは関係なく保持してしまう。そこが違いではあるんだが、PeerCastも信用できる相手をトラッカーとYPと定義しているので、YPがローカルにある場合はどっちにしろ127.0.0.1を採用してしまうわけだ。同じマシンにYPまであることは普通ないだろうとはいえ、LAN内外のYPに同時に載せる場合も同じことが起きるな。

いくらか対策は考えつく。その一。グローバルIPアドレスが既に設定されていたら再設定しない。だめだろそんなの。WAN再接続でグローバルIPなんてすぐ変わる。

その二。自分の覚えてるグローバルアドレスより狭い範囲のアドレスが渡されたら再設定しない。悪くはなさそうに見えるが、後から来たのを優先だったのが広い範囲のを優先しただけでLAN内YPと外部YPに同時に配信した時両立しないのはそのままじゃないか?LAN内のYPが紹介してくるのがWAN側のIPアドレスになるんだがLAN内からはLAN内のアドレスが見えて欲しいところ。

その三。チャンネル毎に自分のグローバルアドレスを保持する。これがいいかな。特に問題は出そうにない。問題があるとすれば今までそんな作りにしてないので変更がめんどそうだなぁということぐらいか。

ちゃんと対策するならその三なんだが、そう簡単に起きないであろうことだしその二で事実上問題が出ないのでこれにしよう。LAN内から見てもWAN側のアドレスが見えちゃうんだが、外に配信できてる以上は外を経由したところで同じインスタンスが見えるはずであり、そしたらつながるから問題ないよねと。

結局PeerCastはLANの内外に同じインスタンスで配信できるようになってないってことだな。まあ確かにやらんし妥協しても問題はないだろう。俺もよくこんな問題に遭遇したなと言えるくらい偶然のものだし。

その三がいいなぁというので思ったんだが、PeerCastはチャンネル単位でしかリレーしないし情報も共有しないので1インスタンス1チャンネルでも問題起きねーんじゃないだろうか。唯一共有するのが合計接続数制限くらいなんだよなぁ。と思ったが接続待ち受けとかYPに載せるための接続とかは共有か。グローバルアドレスはともかく、他は今でもだいたいチャンネル個別に保持するようにしてるか。


ページのトップへ | トップ «前の日記(2011-09-15) 最新 次の日記(2011-10-03)» | 編集 | kumaryu.net by kumaryu