2
我是新來的node.js和socket.io,我試圖編寫一個小型服務器,將更新基於python輸出的網頁。Node.js的Python子腳本輸出完成,而不是實時
這最終將被用於溫度傳感器,所以現在我有一個打印每隔幾秒鐘溫度值的虛設腳本:
Thermostat.py
import random, time
for x in range(10):
print(str(random.randint(23,28))+" C")
time.sleep(random.uniform(0.4,5))
這裏有一個減少版服務器:
Index.js
var sys = require('sys'),
spawn = require('child_process').spawn,
thermostat = spawn('python', ["thermostat.py"]),
app = require('express')(),
http = require('http').Server(app),
io = require('socket.io')(http);
thermostat.stdout.on('data', function (output) {
var temp = String(output);
console.log(temp);
io.sockets.emit('temp-update', { data: temp});
});
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
最後的網頁:
的Index.html
<!doctype html>
<html>
<head>
<title>Live temperature</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div id="liveTemp">Loading...</div>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('temp-update', function (msg) {
$('#liveTemp').html(msg.data)
});
</script>
</body>
</html>
的問題是似乎的NodeJS對收到的所有溫度值的同時,和而不是在隨機獲得10個溫度值間隔,我得到所有的值在一個長字符串中的腳本完成後:
sys.stdout.flush()做到了! – mbdavis 2014-09-06 13:11:45