diagnosis.py
リアルタイムのイベントベースのデータを生成する Python スクリプトがあります。Node.js を使用すると、それを子プロセスとして起動してその出力をキャプチャし、Socket.IO を使用してそれをクライアントに送信し、HTML を使用して表示できます。
サーバ
var util = require('util'),
spawn = require('child_process').spawn,
ls = spawn('python', ['diagnosis.py']);
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
ls.stdout.on('data', function (gdata) {
socket.emit('news', gdata.toString());
});
});
クライアント
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
var d = "";
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
d += data;
document.getElementById('data').innerHTML = d;
console.log(data);
});
</script>
</head>
<body>
<div id="data"></div>
</body>
</html>
質問
これは素晴らしいことですが、Socket.IO が提供するのと同じ HTML-Node.js 通信機能を探している場合はどうでしょうか。どうやってそれをしますか?そこにはWebサーバーがないため、Socket.IOはあまり意味がなく、ベアTCPを介した通信は同じパワー/エレガンスを提供しません. Node.js と Python の間で全二重通信を実現するにはどうすればよいですか?
更新私は自分の質問に答えましたが、別のアプローチを受け入れます。RPC は、私が望むことを完全には行いません。