at_ito
2019年12月1日 17時10分
Webアプリケーションを作成していると、クライアントからのアクセスにレスポンスするだけでなく、クライアントからのリクエストがなくてもサーバーからデータを送りたい場合があるかと思います。
そのため、ここではSocket.IOを使ってサーバーからクライアントに5秒間隔でテキストを送るアプリケーションを作成してみます。
1. 環境
- 製品: Armadillo-X1
- Linuxカーネル: 4.9-at12
- ユーザーランド: Debian GNU/Linux 9.0(stretch)
- nodeバージョン: v12.13.1
- npmバージョン: 6.12.1
2. Node.jsのインストール
以下のブログを参考にNode.jsをArmadillo-X1にインストールしてください。
- https://users.atmark-techno.com/blog/8700/3720
3. 環境設定
以下のコマンドを実行し、アプリケーションに必要な環境を構築してください。
[armadillo ~]# mkdir socketio-simple
[armadillo ^}# cd socketio-simple
[armadillo ^/socketio-simple}# npm init -y
[armadillo ^/socketio-simple}# npm i -S express node-cron socket.io
4. ソースファイルの作成
以下のようにindex.jsファイルを作成してください。
const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const cron = require('node-cron');
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
http.listen(3000, () => {
console.log('listening on *:3000');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
cron.schedule('*/5 * * * * *', () => {
console.log('send hello.');
io.emit('message', 'hello');
});
以下のようにindex.htmlファイルを作成してください。
<!doctype html>
<html>
<head>
<title>receive messages.</title>
</head>
<body>
<ul id="messages"></ul>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$( () => {
const socket = io();
socket.on('message', (msg) => {
$('#messages').append($('<li>').text(msg));
});
});
</script>
</body>
</html>
5. 実行
以下のコマンドを実行し、サーバーを起動させてください。
[armadillo ^/socketio-simple}# node index.js
上記実行後、PCでブラウザを立ち上げて「http://[armadilloのIPアドレス]:3000/」にアクセスしてください。
特に問題なければ、5秒間隔で「hello」という文字が追加されていきます。
参考ソースコード
今回作成したソースコードは、以下のURLからダウンロード可能です。
- https://users.atmark-techno.com/system/files/blogs/socketio-simple.tar.gz