我是新來的節點和socket.io。我有一個nodejs服務器,我正嘗試使用它來產生一個Python進程,並將數據傳遞給網頁和從網頁傳遞數據。在Python端,我試圖使用Python的stdin/stdout管道。在nodejs和Python之間交換數據
從Python到nodejs和到服務器的一切工作正常。但是,當我嘗試使用stdin.write將數據從nodejs傳遞迴Python時,節點崩潰時出現「write after end」錯誤。我想知道如果我用來從Python接收的套接字與我試圖發回的套接字發生衝突。我正在使用計時器每秒鐘將數據發送到網頁。
這似乎與Python在調用sys.stdin.readlines()時期待EOF有關,但是,當我從nodejs使用stdin.end()時,那是在出現錯誤時。有趣的是,如果我從來不打電話stdin.end,我沒有得到錯誤,但我也沒有收到任何東西。
任何幫助,非常感謝。恐怕我對socket.io不夠了解,看看這裏出了什麼問題。謝謝。
IN的NodeJS: 產卵Python的過程:
var util = require('util'),
spawn = require('child_process').spawn,
py = spawn('python', ['data_collect.py']);
從Python中接收數據:
py.stdout.on('data', function(data){
python_output = data.toString();
將數據發送到瀏覽器:
var listener = io.listen(server);
listener.sockets.on('connection', function (socket) {
socket.emit('dataPacket1', {variable_1: data1});
socket.emit('dataPacket2', {variable_2: data2});
socket.emit('dataPacket3', {variable_3: data3});
}, 1000);
從瀏覽器接收和發送到Python:
socket.on('messageFromBrowser', function(data) {
py.stdin.setEncoding('utf-8');
py.stdin.write(JSON.stringify(data.browser_value+'\n'));
py.stdin.end(); <--- Error happens here
});
在Python: 發送到的NodeJS:
output = "dataout"
sys.stdout.write(output)
sys.stdout.flush()
從的NodeJS接收:
lines = []
while True:
line = sys.stdin.readline()
if line !='':
lines.append(line)
else:
break
return lines
謝謝你的建議。事實證明,我試圖做的似乎並不是那麼普遍。無論如何,塞內卡似乎是一個很好的系統,即使不是這個項目,也可能適用於我的其他幾個人。出於絕望,我最終使用Python的stdout流來簡單地將數據打印到節點,然後使用節點的服務器功能在瀏覽器中顯示數據。我能夠將數據從瀏覽器返回給Node,但不能將它發送給Python(stdin流更加快捷,如果沒有我發送EOF,我就無法工作)。 – Dewey