今更なのん!?なネタを一つメモ書き。今後半自動でバイナリデータの受信を実現する上で大事なのです。
socket.io
socket.io、Websocketを初めとしたhttpを用いたリアルタイム通信を実現するとても高機能なモジュール。
こいつは通常server(nodejs)側にrequire(socketio)
を使い、client側(ブラウザ)にrequire(socket.io-client)
を使ってアプリケーションを実装することが多いと思う。
ただしクライアントが常にWebブラウザを実装しているとは限らない…というかRaspberryをコンソールで使っている状況では難しそう。ヘッドレスブラウザ使ったり、組み込まれてるブラウザ(Midori?)を頑張って解析すればもしかしたら?かもだけど、目的を逸脱した感じが半端無い…。
解決策は簡単でRaspberry側がnodejs上でrequire('socket.io-client')
すればブラウザ無しにserverと通信できる(参考)。流石ですnodejsさん!(とnpmとsocket.io兄貴)。
サンプルコード
手元で動作確認した時のサンプルコードを掲載.
server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
app.get('/', function(req, res){
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function(client) {
console.log('some client has been connected.');
client.on('message', function(msg) {
console.log('receive message.');
client.emit('voice', 'You say ' + msg);
});
});
client.js
var client = require('socket.io-client');
var socket = client.connect('http://localhost:3000');
socket.on('connect', function() {
console.log('connection has been established.');
socket.emit('message', 'まきまき、応答してください。');
socket.on('voice', function(msg) {
console.log('Received:' + msg);
socket.disconnect();
process.exit(0);
});
});
index.html(今回htmlはオマケ.)
<html>
<head>
<title>socket.io sample.</title>
</head>
<body>
<p>Both server and client will be running on nodejs.</p>
</body>
</html>
server. clientそれぞれをnodeで起動すると次のような結果が得られる。
$ node server.js
Server running at http://127.0.0.1:3000/
some client has been connected.
receive message.
$ node client.js
connection has been established.
Received:You say まきまき、応答してください。
nodejs楽しいな。いいなこれ。
Written with StackEdit.
No comments:
Post a Comment