Node.JSでWebSocket まずはインストール

#NodeJSのインストール
##nvmのインストール

以前Rubyでインストールしたが、NodeJSでも可能っぽいのでそっちも試して見ます。

当初は普通にyumでいれようかとも思ったのですが、公式サイトの方法を試してみても

```
## Your distribution, identified as "centos-release-6-5.el6.centos.11.1.x86_64",
 is not currently supported, please contact NodeSource at https://github.com/nodesource/distributions/issues
if you think this is incorrect or would like your distribution to be considered for support
```

とかでてきて【サポートしとらんよ！】といわれたので、別の方法でします。

nodejsにはnvm(Node Version Manager)というヴァージョン管理してくれるツールが有ります。
Rubyのときにもrbenvというのが有りましたが、あれと同じだとおもう（違うかもしれない）。

それを試してみます。

```
git clone https://github.com/creationix/nvm.git ~/work/node/nvm
```

とするとお決まり、エラー。
ということで、おそらくProxyなのでさくっと追加

で、落ちてきたとことのnvm.shがあるので、これを使えるようにする。
パス通しはやりやすい方法で。

パスが通れば次のコマンドでインストールできるので打ってみる。

```
$ nvm ls-remote
            N/A

```

？？？？

なぜか取れない。
おそらくnvmがProxy経由できていないっぽい。
なので、色々と調べたら、どうやらGlobal環境変数に追加すればいけないらしい。
curlみたいに

```
curl --proxy *****
```

に都度指定する方法がどうしても見つけられないので、しかたなく.bash_profileに追加して再度動かす。

```
$ nvm ls-remote
        v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
        v0.1.18
        v0.1.19
        v0.1.20
	…
         v6.2.0
         v6.2.1
         v6.2.2
         v6.3.0
         v6.3.1
         v6.4.0
         v6.5.0
         v6.6.0
         v6.7.0
         v6.8.0
         v6.8.1
         v6.9.0   (LTS: Boron)
         v6.9.1   (LTS: Boron)
         v6.9.2   (LTS: Boron)
         v6.9.3   (LTS: Boron)
         v6.9.4   (Latest LTS: Boron)
         v7.0.0
         v7.1.0
         v7.2.0
         v7.2.1
         v7.3.0
         v7.4.0

```

とれた。。。
ということで、LTSの6.9.4を入れます。

##NodeJSのインストール

```
$ nvm install v6.9.4
Downloading and installing node v6.9.4...
Downloading https://nodejs.org/dist/v6.9.4/node-v6.9.4-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v6.9.4 (npm v3.10.10)
Creating default alias: default -> v6.9.4
```

さすがにここまで来ると失敗もなく完了

```
$ node -v
v6.9.4
```


#Socket.IOを入れる
##なぜSocket.IO??

問題なさげなので次はsocket.ioを入れる。
なんでwebsocketなのにsocket.ioなの？という話になるかもしれないが、
双方向通信としてのsocket.ioというよりはライブラリとしてのsocket.ioを利用したいと思ったため。

普通に利用しようと思ったらたぶん以下のようなことを注意しないといけないのだろうが、ライブラリを使えばその辺はまるっと解決してくれる。いうなれば、ちゃちゃっと実装したいならコレでいい気がしていたので。

**というか、Rubyから変えた理由はほぼコレです。。。情けなくてスンマセン。**

 - 全クライアントへのブロードキャスト
 - heartbeat
 - 再接続処理
 - ルームによるコネクションの管理

理由はそれだけです。

##Socket.IOのインストール
基本、以下のコマンドを打つだけで
node_modules/
というディレクトリが生成され、一式インストールされるのですが、いくつか注意。

```
$ npm install socket.io
~/work/node/websocket
`-- socket.io@1.7.2
  +-- debug@2.3.3
  | `-- ms@0.7.2
  +-- engine.io@1.8.2
  | +-- accepts@1.3.3
  | | +-- mime-types@2.1.14
  | | | `-- mime-db@1.26.0
  | | `-- negotiator@0.6.1
  | +-- base64id@1.0.0
  | +-- cookie@0.3.1
  | +-- engine.io-parser@1.3.2
  | | +-- after@0.8.2
  | | +-- arraybuffer.slice@0.0.6
  | | +-- base64-arraybuffer@0.1.5
  | | +-- blob@0.0.4
  | | `-- wtf-8@1.0.0
  | `-- ws@1.1.1
  |   +-- options@0.0.6
  |   `-- ultron@1.0.2
  +-- has-binary@0.1.7
  | `-- isarray@0.0.1
  +-- object-assign@4.1.0
  +-- socket.io-adapter@0.5.0
  +-- socket.io-client@1.7.2
  | +-- backo2@1.0.2
  | +-- component-bind@1.0.0
  | +-- component-emitter@1.2.1
  | +-- engine.io-client@1.8.2
  | | +-- component-emitter@1.2.1
  | | +-- component-inherit@0.0.3
  | | +-- has-cors@1.1.0
  | | +-- parsejson@0.0.3
  | | +-- parseqs@0.0.5
  | | +-- xmlhttprequest-ssl@1.5.3
  | | `-- yeast@0.1.2
  | +-- indexof@0.0.1
  | +-- object-component@0.0.3
  | +-- parseuri@0.0.5
  | | `-- better-assert@1.0.2
  | |   `-- callsite@1.0.0
  | `-- to-array@0.1.4
  `-- socket.io-parser@2.3.1
    +-- component-emitter@1.1.2
    +-- debug@2.2.0
    | `-- ms@0.7.1
    `-- json3@3.3.2

npm WARN enoent ENOENT: no such file or directory, open '~/work/node/websocket/package.json'
npm WARN websocket No description
npm WARN websocket No repository field.
npm WARN websocket No README data
npm WARN websocket No license field.
```

1. コマンドを打ったカレントディレクトリにnode_modulesが作られる。
2. ただし、**上階層のディレクトリを再帰的に探し、node_modulesがあるとそこインストールされる。**

特に2,に注意
私は普通に試してみてその残骸を残さず、work_direcrtoryをつくってそこにinstallしたら、なぜか入らない。
原因はコレでした。

あと、WRAN系のメッセージがでましたが、基本エラーとかではなければ見とけよって意味だと個人的に思っているのでスルー。

とりあえず、コレで準備はできたはずなので、次回にサーバの立ち上げと、wsでの接続を試してみたいと思います。