Socket.ioを使ってみる
参考元
Node.jsで現在時刻を取得
Node.jsからSocket.IOを使うための事前知識
Socket.ioとは
双方向非同期のリアルタイムなhttpリクエスト 。
今回使用するNodejsでは、受信がon
, 送信がemit
。
作るもの
入力した文字に現在時刻を付加した文字を要素に追加する。 つまり、クライアントとサーバ側(双方向)でのデータのやりとりを行う。
階層
- /root
- /node_modules
- index.html
- server.js
- package.json
必要なモジュール
npm install socket.io --save-dev
npm install date-utils --save-dev
クライアント
入力ボックスでデータを入力し、サーバに送り、その後サーバから送られてきたデータを追加する。
index.html
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js"></script> <meta charset="UTF-8"> <title>chat</title> <style> .content-box { padding: 10px; margin: 10px; max-width: 576px; max-height: 324px; overflow-y: auto; border: solid #ccc; word-wrap: break-word; } </style> <script> $(function() { // サブミット時 $('form').submit(function() { // 入力した情報をサーバの'msg'に送る socket.emit('msg', $('input').val()); $('input').val(''); return false; }); var socket = io.connect(); // 受け取る socket.on('msg', function(data) { var html_data = '<div class="content-box">' + data + '</div>'; $("#content-root").prepend(html_data); }); }); </script> <form><input><button>push</button></form><div></div> <div class="container"> <div id="content-root"></div> </div>
サーバ
データを受け取り、現在時刻を付加する。
server.js
var fs = require('fs'); var http = require('http'); var server = http.createServer(); require('date-utils'); server.on('request', function(req, res) { var stream = fs.createReadStream('index.html'); res.writeHead(200, { 'Content-Type': 'text/html', }); stream.pipe(res); }); // ソケット(双方向通信) var io = require('socket.io').listen(server); server.listen(8000); // 接続時初期化処理 io.sockets.on('connection', function(socket) { // 受け取る socket.on('msg', function(data) { var dt = new Date(); var formatted = dt.toFormat("YYYY-MM-DD HH24:MI:SS"); var re_data = `[${formatted}] ${data}`; // 送る io.sockets.emit('msg', re_data); }); });
実行
node server.js
> ブラウザでlocalhost:8000
と入力。> 文字列を入力し、submit。