這是我到目前為止開發的。首先,我的 websocket 服務器:// app.jsconst spawn = require('child_process');const WebSocket = require('ws')const wss = new WebSocket.Server({ port: 8080 })wss.on('connection',ws => { ws.on('message', message => { const python = spawn('python', ['-u', 'main.py', message]) python.stdout.on('data', function (data) { // Pipe data from python script ... dataToSend = data.toString('utf8'); ws.send(dataToSend) }); python.on('error', err => { console.log(err) }) }) ws.on('close', () => { console.log('Client has disconected') })}).on('error', err => { console.log(err)})它的基礎知識用于child_process生成一個傳遞message從客戶端發送的 python 腳本。 -u傳遞是為了刷新 python 腳本打印,因此它可以流出python.stdout并發送到客戶端。這是從 app.js websocket 服務器調用的我的 python 腳本:# main.pyimport time, sysi = int(sys.argv[1])while i > 0: print(i) i-=1 time.sleep(1) # this while is just anexemple of some pre-script process # (for exemple, signin on user account)# after signin...print('input something from client: ')x = input()while True: print(x) time.sleep(1) # use input x variable # here is where my code happens and the program keeps executing pass如您所見,我正在使用從服務器message傳遞過來的信息spawn()來保持我的第一個while存活。這只是一個例子,我需要用戶提供這種輸入。保持你的注意力,x = input()因為這是我的主要問題最后,我的客戶端 websocket// client.jsconst WebSocket = require('ws');let socket = new WebSocket("ws://localhost:8080");socket.onopen = function(e) { let someClientInfo = 2 console.log("sending data..."); socket.send(someClientInfo);};當然,當客戶端收到最后一行時,它會一直卡住,因為他無法從他這邊輸入任何內容。他剛剛收到來自 python 的輸出流。有人知道是否可以將第二個輸入傳遞給我正在運行的 python 腳本嗎?我開始認為這也許是不可能的,但我不能考慮另一種方法來做到這一點。如果是child_process做不到的事情,我應該尋找什么方法?我的主要目的是與服務器上運行的 python 腳本保持有效通信,以便我可以將此輸入從客戶端傳遞給 python。我希望能夠斷開與該套接字的連接,然后再次連接并繼續接收 python 腳本輸出。到目前為止,我也找不到辦法做到這一點。我的主腳本不能在服務器代碼中(也許如果你對 flask 的基本實現或類似的東西感到困惑),因為我希望能夠啟動多個腳本并且每個客戶端用戶都應該能夠與他自己的 python 腳本在服務器上運行。每個用戶都會有自己的main.py到目前為止,我還沒有考慮如何讓所有這些進程在服務器上運行,或者即使這樣做是安全的。對此的任何建議都將非常感激,我也將非常感激。
添加回答
舉報
0/150
提交
取消