如何通过 HTTP 发送进程的标准输出

本文关键字:进程 标准输出 何通过 HTTP | 更新日期: 2024-10-25 06:56:35

我的MVC应用程序中有一个端点设置,用于启动外部进程(powershell脚本)。我希望能够在创建浏览器时将输出重定向到"实时"浏览器。有没有如何做到这一点的例子?

谢谢!

如何通过 HTTP 发送进程的标准输出

读取进程的标准输出流并通过 SignalR 将其馈送到浏览器应该可以工作。在这里,你可以找到一些示例来帮助你开始使用 SignalR。

如果您决定尝试一下,这可能对您有用:

从集线器外部通过集线器广播(在页面底部)

我自己在类似的场景中成功使用了 SignalR(将长时间运行的操作的实时进度提供给浏览器)。

您可以考虑的一种方法是我在小型销售点应用程序中使用的一种方法,以允许通过 Web 浏览器进行远程查询。

我创建了一个简单的 Web 服务器,该服务器作为附加到应用程序其余部分的 DLL 在自己的线程中运行。 当应用程序启动时,它将检查是否也应启动 Web 服务器。

这是一个非常简单的Web服务器,使用C++和CAsync套接字,但是它允许使用来自其他计算机的Web浏览器进行两种访问:(1)像普通Web服务器一样下拉文件,例如HTML页面,Javascript,图像等,以及(2)使用特定于功能的URL激活特定的功能组件,例如生成报告。

使用这个,我也成功地将JavaScript与JSON一起使用。

您可以在

许多地方找到多种语言的简单HTTP Web服务器的源代码示例,并且在stackoverflow问题中有一些示例和链接。

这样做的关键是让您的 Web 服务器功能实现 HTTP 协议,并保持 TCP 连接,将其他内容推送出去。 您案例中的附加内容将是您已启动的流程的输出。

因此,这将要求您启动进程并执行标准 I/O 重定向,以便您启动的进程将通过管道将其输出发送到您的 Web 服务器,然后该服务器将从管道读取进程输出,然后将其从打开的 TCP 端口发送到浏览器。

使用它,您实际上可以做一些JavaScript,通过开发一个基于文本的协议,让浏览器用户将命令发送回正在运行的进程,该协议被发送回Web服务器,然后将传入的文本发送到启动的进程。

其中一些实际上类似于Apache等之前原始Web服务器中使用的较旧的CGI类型的功能。 这些服务器所做的是启动一个应用程序,通常是一些脚本,如Perl,但有时也编译一些东西,如C,然后从应用程序获取标准输出并将其反射回浏览器TCP连接。 通用网关接口,我认为就是它的意思。