N予備校のプログラミング入門メモ15
はじめに
もう少しだけやります。
4章 実践サーバーサイドプログラミング
09.WebSocket
Socket.IOというアプリを利用する。
npm install socket.io@1.4.5 socket.io-client@1.4.5 --save
yarnの場合は特に--save
をつけなくてもpackage.json
に反映される。npm install --save-dev
のときはyarn add --dev
にする必要がある。
bin/www
を編集する。socket.io
モジュールを読み込んでsocket.emit
関数でWebSocketの接続に対してイベントを発行するようにemitServerStatus
関数を実装して、socket.io
モジュールのconnection
イベントが発火した際に実装したemitServerStatus
関数を定期的に実行する感じのコードを書いた。
function emitServerStatus(socket) { socket.emit('server-status', { loadavg: os.loadavg() }); console.log('server-status event emitted.'); } io.on('connection', function (socket) { setInterval(emitServerStatus, 10, socket); });
setInterval
で関数を10ミリ秒ごとに呼び出しててマジかってなるけどWebSocketなら大丈夫ってことなんだろうきっと。
ここまで実装してPORT=8000 npm start
するとエラーが出て起動しない。追記した部分をコメントアウトして再度サーバを起動したが同じエラーが出た。
node_modules
を削除して再度yarn
した後、試しに
yarn add socket.io@1.4.5 socket.io-client@1.4.5
してサーバを起動したらうまくいった。yarnでインストールしても一緒だと思うのでtypoしてたんじゃないかと思っている。
ここまでのコードではまだSocket.IOの恩恵を受けていない。
クライアント側で以下のようにする。
const socket = require('socket.io-client')('http://localhost:8000'); socket.on('server-status', (data) => { loadavg.text(data.loadavg.toString()); });
localhost:8000
にアクセスすると怒涛の勢いでserver-status event emitted.
の文字が表示された。
webpack
するのをよく忘れるので忘れないこと。
yarn run webpack
で./node_modules/.bin/
の中のwebpack
を実行してくれる。
gitにコミットするとき、コメントを待ちがえたままコミットしてしまった。git commit --amend -m "コメント"
とすると直前のコメントを変更できた。
途中で電池が切れて落ちたんだけど、復帰したらここまで書いたところが生きてて感動した。新しいPCありがとう、学習用に買ってよかった。