ELB(CLB) で WebSocket 通信
ELB(CLB) で WebSocket 通信
ALB では標準で WebSocket プロトコル機能に対応しているため、HTTP/HTTPS リスナーで受けて HTTP/1.1 から Upgrade で WebSocket 通信を開始することができます。 しかしながら、CLB, NLB では、ELB の機能としては対応しておりませんが、TCP リスナーを経由してバックエンドで WebSocket の機能に対応することで実現可能です。TCP レイヤーではスティッキーセッションのようなセッション維持機能を利用することができないので、nginx でプロキシし、その際、接続元の IP アドレスの情報は Proxy Protocol を利用する形で、WebSocket 通信を行います。 ALB では、Upgrade からそれに続く WebSocket 通信の間でスティッキーセッション機能を利用することもできますが、WebSocket が1つの TCP コネクションを利用するため、スティッキーセッション機能を利用することなく一つのバックエンドに割り振られます。 ただし、CLB ではアイドルタイムアウトもあり、60秒間アイドル状態が続くとコネクションが切断されてしまいます。そのため、サーバ側から定期的に Ping を定期的に行い、Pong の応答を得てコネクションを維持する方法があります。
設定
Node.js のインストール
$ sudo yum install -y gcc-c++ make openssl-devel
$ curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
$ sudo yum install -y nodejsインストールされていることの確認
$ node -v
v8.11.3npm のインストール
$ curl -L http://npmjs.org/install.sh | sudo sh
$ vim ~/.npmrc
$ vim ~/.bashrc
$ source ~/.bashrc.npmrc
.bashrc に以下を追記
インストールされていることを確認
Socket.IO 等のインストール
nginx のインストール
プログラムの作成
ELBのProxy Protocolの設定
動作確認
ELB の FQDN に対してブラウザからアクセス http://.us-west-2.elb.amazonaws.com/ Socket.IOのアプリケーション起動
参考
https://qiita.com/you21979@github/items/4c9c382b9536effc590d
http://d.hatena.ne.jp/lettas0726/20110406/1302041546
http://d.hatena.ne.jp/lettas0726/20110406
https://socket.io/get-started/chat
https://qiita.com/yamamaijp/items/84da15b81ec5c16ffdd0
https://debiancdn.wordpress.com/2012/03/03/elb-loadbalancer-websocket/
Last updated