読者です 読者をやめる 読者になる 読者になる

通信高速化に関する考察

自メモ>
 ここらへんの話、異機種間のソケット通信プログラム等を
メンテしてたりするわけなんですけど
Androidが通信遅い=>IOS版は安定してるのに=>IOS版に悪い評判が立つ」
って論調でなんとかならんかなーと調べてたりしてる状態*1

 たしかにIOSだとスムーズに通信 =>Androidだと

  • 通信抜けしたり
  • ディレイしたり

な感じは確かに感じるんだよなorz
下手にスレッド使ってるからかもしれない。

 自分がメンテしているコードだと

  • Androidは遅い
  • ボタン操作もとりあえず別スレッドに先送りするイメージ
    • ExecutorService
    • Handler

な方針だったりする。体感速くしたいという気持ちはわかるんだけどな。。(汗


 まずソケット通信プログラムで
Android側のクライアント側で頑張る話のメモは

 この時点では
BufferReader/BufferWriter =>SocketChanel (NIO)
に置き換えて頑張る という話

 これでもまだ微妙に遅延するって話で
UDPの話がTLに出てきたのでちょっと考察してみた次第

クライアント側の参考資料)

鯖側の参考資料

鯖側の参考資料




http://twitter.com/GOTT_eclair/status/299836009242316800:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299884369970085888:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299889623507795968:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299890254461145088:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299915366803578882:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299919272443015169:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299919797473402880:twitter:detail:right
http://twitter.com/GOTT_eclair/status/299920653262389249:twitter:detail:right


 @ さんにコメントを頂いた。
有能な人ほど鍵になりがちなので直接引用できないのは残念*2


富士通UDPベース高速ファイル転送、
これ2009年です。RTT回避あたりの着目点はシルバーバレットと同じ。
RT FTPの約20倍の転送速度を実現する技術「BI.DAN-GUN(ビーアイドットダンガン)」

http://jp.fujitsu.com/journal/strength/technologies/200906-02.html


シルバーバレットはデータ転送用のUDPとは別に制御用のTCP接続を浸かっているのに対して、
富士通のBI.DAN-GANはUDPのみでエラー訂正情報付きでやり取りしている。
http://twitter.com/kimukou2628/status/296276504843804672:twitter:detail:right

@kimukou2628 UDP のポートと TCP のポートとは別物なので同時に同じポートで Listen していても問題ないです。
http://twitter.com/kimukou2628/status/296280375892779009:twitter:detail:right

@kimukou2628 IPパケットに付いているTCPUDPかの識別子で判断して、
TCP/UDPレベルのデータ部でそれぞれ宛先ポート番号を持ってます。
ここらへんは OS のカーネルレベルでやってると思います (よく知らんが)。
http://twitter.com/kimukou2628/status/296284206517067777:twitter:detail:right

@kimukou2628 コード上には TCPUDP で Listen 状態の書き方が違うので
(JavaTCP なら ServerSocket#accept()、UDP なら DatagramSocket#receive())
受信後にTCPUDPか分岐する…

@kimukou2628 必要はないですね。

よく考えたらデータ転送に UDP、再送制御に TCP を使うシルバーバレット方式って
転送接続を UDP にして制御接続上で再送要求付けた FTP 仕様に包括できそうな希ガス

いい加減 FTP は滅びて頂きたいが。

転送接続に UDP を使う FTP 拡張仕様とか RFC になってんじゃないかと思ったが引っかからなかった。
TFTP が UDP だがあれはまた目的も仕様も違うし。


通信自体の仕様的な考察)



https通信(SSL通信)に関してのメモ)


@kimukou2628 アプリから接続しようとした場合は接続エラーになります。ブラウザから直接Blobのファイルにアクセスすると「この証明書は無効ですが表示ますか」的なダイアログが出ますね。どちらも挙動としてはオレオレ証明書と同じです。

まあそうなりますよね。。
余計なデータ削って1/2-1/4サイズだから速いって話だけですし。。


*1:IOSが稼ぎ頭だから凄くしょうがない

*2:日本は言質取られたり揚げ足とられたりするので本当に変だよな‥‥