最近はwebsocketを使いたい!という声もありますが、いくつかの制限により、
ELBは最初のネゴシエーションにだけ使って、ネゴシエーション後のwebsocketにかかわらない方法がおすすめです。
そもそも問題は、
- ELBの場合、HTTPモードだとそもそも同じポートのままではwebsocketに遷移できない。
- ELBでTCPモードにした場合でも60秒でタイムアウトする。
の2点が原因です。そのため、2つの方法があります。
解1: ELBは最初のネゴシエーションにだけ使って、ネゴシエーション後のwebsocketにかかわらない方法
C ---------> ELB(HTTPモード) --> S ふつうにHTTPでアクセス。
C <--------- ELB <---- S スクリプトがダウンロードされる
このスクリプトには Sのアドレスpublic ホスト名がそのまま埋めてある
C -------------------> S websocketで接続
C <--------------------S websocketのネゴ
という具合でELBは最初にだけかかわります。
解2: websocketでping/pongを行う
クライアントをいじるのはむずかしいでしょうから、サーバ側からPINGを60秒に一度
はなげることになります。
C ---------> ELB(TCPモード) --> S ふつうにHTTPでアクセス。
C <--------- ELB <---- S スクリプトがダウンロードされる
C ----------> ELB ------> S websocketで接続
C <---------- ELB <----------S
websocketのpingを以降、たとえば30秒に一度なげます。
0 件のコメント:
コメントを投稿