「SOBA フレームワーク」カテゴリーアーカイブ

自社開発のP2PフレームワークのSOBA フレームワークに関する話です。

マルチキャストとプロトコル解析

 最近、弊社の製品もマルチキャスト対応をしました。

 マルチキャストとは、複数個所へのデータ配信量を劇的に削減する技術の事で、例えば「ニューヨークとシリコンバレー」に同じデータを送信したい場合、宛先情報を2つ貼り付けたデータを1つアメリカ方面に投げます。同じ経路で送れる間は、そのまま送信し分岐が必要な場所(おそらく、西海岸付近のルータ)でデータを複製し、一方に「ニューヨークの宛先」もう一方に「シリンコンバレーの宛先」を付け、データを分岐させます。こうする事で、太平洋上を流れるデータ量がほぼ半分になります。

 この技術により、ADSLのような上り(送信)速度の遅い回線でも快適にウェブ会議をする事が可能になりました。

 ところが、中継システムに不具合があるようで、半日も使うとCPUが100%に張り付く症状が発生し、プロファイラにかけてみると一部のスレッドが暴走していることが判明しました。暴走の理由はソケットからのReadが永遠にトライアゲインエラーを吐き続けるというものでした。

 暫定対処はしたので、とりあえず安定して動作しているのですが、根本的な対策をする必要があり、負荷プログラムの作成が急務だったのですが、中継システムは改良に次ぐ改良で、正確なプロトコルドキュメントが存在していません。しかもどのドキュメントも使い物になりません。さすがに、30万行のソースコード(実行ラインで15万行)を読む元気もない訳で。。。

 しかも、エンドツーエンドで暗号化しているので、途中でパケットを拾ってもさっぱり分からないというのは結構困りました。結局、中継サーバからバイナリデータを抜き出し、バイナリエディタと関数電卓とを交互ににらめっこしました。プロトコルを解析しなんとか負荷プログラムを作成できました。準備に3日、解析に1日かかった訳ですが。。。

 みなさんちゃんとドキュメントは書きましょう orz

SOBA Media Player

SOBA Mediaplayer
 3年ほど前に作ったSOBA用のメディアプレイヤーを本格的に実装する日が来るとは思わなかった。。。ちなみに、写真のバージョンでは再生/停止とボリュームのコントロールしかできません。しかも、複数人で利用すると微妙に停止位置がズレます。

サクサクっと実装して、正式にリリースしたいと思います。リリースバージョンではシーク機能や停止位置の正しい同期なども実装したいと思います。