У вас есть python script diagnosis.py
, который генерирует данные на основе событий в реальном времени. Используя 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());
});
});
Client
<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>
Вопрос
Это здорово и все, но что, если вы ищете ту же коммуникационную мощь HTML- Node.js, которую предоставляет Socket.IO, но вместо этого между Node.js и Python? Как бы Вы это сделали? Там нет веб-сервера, поэтому Socket.IO не имеет большого смысла, и общение по голым TCP не обеспечивает такую же мощность/элегантность. Как достичь полнодуплексной связи между Node.js и Python?
Обновление Я ответил на свой вопрос, но я открыт для альтернативного подхода. RPC не совсем делает то, что я хочу.