这是我到目前为止开发的。首先,我的websocket服务器:
// app.js
const 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
是生成一个Python脚本,该脚本传递message
从客户端发送来的。-u
传递以刷新python脚本打印,因此可以将其流式传输python.stdout
并发送给客户端。
这是从app.js websocket服务器调用的我的python脚本:
# main.py
import time, sys
i = 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()
因为这是我的主要问题
最后,我的客户网络套接字
// client.js
const WebSocket = require('ws');
let socket = new WebSocket("ws://localhost:8080");
socket.onopen = function(e) {
let someClientInfo = 2
console.log("sending data...");
socket.send(someClientInfo);
};
socket.onmessage = function(event) {
console.log('Output of python script: ' + event.data.toString('utf-8'));
};
socket.onerror = function(event) {
console.log(event);
};
它基本传递了第一个参数someClientInfo
,然后接收如下的python脚本输出:
sending data...
Output of python script: 2
Output of python script: 1
Output of python script: input something from client:
当然,当客户收到这最后一行内容时,它总是会卡住,因为他无法从自己的侧面输入任何内容。他只是从python接收输出流。
有人知道是否有可能将第二个输入传递给我正在运行的python脚本?我开始认为也许这是不可能的,但是我不能以另一种方式做到这一点。如果child_process
做不到,那我应该寻找什么方法?
我的主要目的是保持与服务器上运行的python脚本的实时通信,因此我可以将此输入从客户端传递给python。
我希望能够从此套接字断开连接,然后再次连接并继续接收python脚本输出。到目前为止,我也找不到办法。
我的主脚本不能放在服务器代码中(例如,如果您对flask的基本实现有所了解,或者类似的东西),因为我希望能够启动多个脚本,并且每个客户端用户都应该能够与之交互他自己的python脚本在服务器上运行。每个用户都有自己的main.py
到目前为止,我还没有对如何保持所有这些进程在服务器上的运行感到满意,即使这样做是安全的。关于此的任何建议将非常感激,我也将非常感谢。
您可能想查看https://www.npmjs.com/package/python-shell可以在node上生成python实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句