简单地说,从php脚本向nodeJS服务器发送命令(与从客户端js发送命令相比,服务器端阻止用户发送自定义和破坏性命令)到nodeJS服务器,然后nodeJS将运行这些命令并将实时输出发送回网页,这是可能的吗。
到目前为止,我所能想到的是使用php curl将命令发送到nodeJS websocket(socket.io),然后nodeJS服务器通过eventsource/socket.io客户端中继输出。
这样做的目的是通过用户设置的命令和任务的实时输出从网络管理VPS。nodejs服务器将在VPS服务器上运行,并派生子进程来运行每个命令。如果可能的话,那么我认为这会变得越来越困难,因为每个客户端应该只能看到他们运行的命令的结果,因此传入的php套接字和传出的事件源将需要如何链接?
有什么想法吗?干杯
您只需运行child_process.exec()
,并通过管道将进程stdout和stderr发送到http响应即可,仅此而已。
我看到的唯一问题是,如果你想让用户运行他们想要的任何命令,Node应用程序不一定知道MIME类型来告诉浏览器响应是什么。当你需要发送HTTP响应代码时,你不一定知道进程是否成功-所以,如果你真的想在远程进程退出时使用500 Internal Server Error
,您需要缓冲输出,直到进程退出,或者等待一段时间,并假设如果它在N秒后没有失败,它就不会失败。
我想你已经意识到,让一个进程通过发出http请求在远程机器上远程运行特定程序是非常危险的,原因有很多可以运行的程序。
下面是一个如何从web接收请求、通过程序进行管道传输并返回到响应的示例。它接收一个传入的图像文件,使用netpbm
和potrace
将其转换为SVG,并将结果发送回客户端,而无需将其写入磁盘——unix管道是一件很棒的事情。您需要安装Linux或类似版本的w/netpbm和potrace才能真正使用它:https://timboudreau.com/code/traceservice/file/tip/traceservice.js