CentOS+Nginx+Node.js+socket.io(WebSocket)
Node.jsで動かすsocket.ioのサーバーの設定
socket.ioのインストール
socket.ioのサーバーコードを配置するディレクトリでsocket.ioをnpmでインストール
npm install socket.io
node_moduleはnpmを呼び出したディレクトリにインストールされる。
socket.ioを利用するソースコードが「server.node」とした場合において
そのファイルが「~/work/」に配置されていたとする。
その場合「~/work/」においてnpm installを呼び出して、socket.ioをインストールする必要がある。
cd ~/work npm install socket.io node server.node
socket.ioサーバーのコードを書く
var io = require('socket.io').listen(10112); io.sockets.on('connection', function (socket) {}
ここで待ち受けポートを指定する。Nginxで利用していないいポートを使う。
このポートは、外部PCから接続される(クライアントのブラウザから)ので
Node.jsを動かすマシンのFireWallの設定を確認しておく。
Nginxの設定
/etc/nginxi/conf.d/default.confを書き換える
location /socket.io/ { proxy_pass http://<Node.jsサーバー>:10112; #proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
proxy_http_versionは、あるとConfigが通らないので外した。
ここで指定するpassは、nginxから見たWecSocketサーバーのアドレス(socket.ioが動いているnode.jsのアドレス)
NginxとNode.jsが同じサーバーで動いている場合は、単にhttp://localhost:10112で良い。
次にブラウザ側.htmlの実装
socket.ioの読み込み。
<script src="/socket.io/socket.io.js"></script>
ここでアクセスされる/socket.io/は、先ほど指定したnginxの設定となる。
つまり、nginxを通してsocket.ioサーバーに接続して、そこからsocket.io.jsを取得している。
Node.js(socket.io)サーバーへの接続
//Connect to WebSocket server var socket = io.connect('http://<Node.jsサーバー>:10112'); //Callback when connect to server. socket.on('connect', function () { console.log( "connect to server" ); });
ここで指定するアドレスは、WecSocketサーバーのアドレス(socket.ioが動いているnode.jsのアドレス)