気ままにIoTメモ

Iotに関わること関わらないこと備忘録

Socket.IOでサーバ・クライアント間通信

ようやくNode.jsらしいネタ。

サーバーがリアルタイムに、複数のブラウザやデバイスと通信をする時に便利な Socket.IO というライブラリがあります。
よくあるサンプルはサーバーとクライアント(ブラウザ)通信というのがあるのですが、
クライアント用ライブラリを使えばブラウザを操作しなくても通信を試す事ができます。

IoTなんかではデバイスが自動的にデータを送る必要があるので、今回はクライアント用ライブラリ socket.io-client を使って通信してみました。

サーバー側

var settings = require('./settings'),
    express = require('express'),
    app = express(),
    http = require('http').Server(app),
    io = require('socket.io').listen(http);


io.on('connection', function(socket) {
    socket.on('emit_from_board', function(msg) {
        console.log(msg);
    });
});

http.listen(settings.port);
console.log("server starting...");

クライアント側

var settings = require('./settings'),
    io = require('socket.io-client');

var url = settings.host + ':' + settings.port;

var socket = io.connect('http://localhost:3000');

socket.on('connect', function() {
    console.log("connect.");
    setInterval(function(){
        socket.emit('emit_from_board', 'hello from device');
    }, 1000);
});
console.log('device connecting...');

f:id:htn_hs:20161102232635p:plain

スクリーンショットでは分かりにくいですが、2つのクラアントから Hello from device をメッセージとして送っています。
サーバー側はメッセージが送られて来たらターミナル上に表示しているだけです。

クライアントの数が増えても上手いことやってくれるので非常に簡単です。
同じことをすれば 1000クライアントの接続を試す なんてことも出来るみたいです。

今度はラズパイとの通信をやってみようと思います。

2016年11月18日追記
IPアドレス変更のみでラズパイとの通信を確認。

iot_lab/03_socketio at master · hsgwa/iot_lab · GitHub

参考

Socket.IO

WebSocketについて調べてみた。 - Qiita

TEST CORDING » node.js 怒濤の50サンプル!! – socket.io編