我有一个在服务器中运行的图形 python 应用程序。有些用户在本地访问应用程序,但有些用户通过启用 -X 选项的 ssh 访问它。
当应用程序的某个选项启用时,它会在特定的网页槽中调用浏览器
os.system("firefox '{}'".format(url)
尽管浏览器以图形方式出现在客户端计算机中,但它实际上是由主机中的应用程序执行的,因此我们遇到了麻烦,因为当太多客户端访问计算机时,它会消耗太多处理能力。
我想,每当检测到应用程序正在由 ssh 会话运行时,浏览器进程就会在客户端计算机中生成,而不是在主机中生成。
是否可以?如果是阳性,怎么办?
答案1
它应该使用 URL 调用 shell 脚本,而不是使用 URL 调用 python 应用程序。shell 脚本将根据主机名、登录信息、环境等确定是否应启动本地浏览器,如果本地浏览器在本地运行 Firefox,则尝试通过 ssh 返回客户端并运行 Firefox 命令。这需要一些工作,并且需要服务器与客户端之间建立某种信任。否则,python 应用程序所能做的最好的事情就是检测它是否正在远程运行,并弹出一个对话框,告诉用户将 URL 粘贴到本地浏览器中
答案2
长话短说:不可以,除非你可以重新设计程序。
AFAICT,该程序适合在用户计算机上使用,至少在具有桌面环境的 Linux 发行版上使用。
我只能推测该程序要么花费太长时间才能完成,使用大量资源,要么不支持 Windows 来证明其通过 SSH 的使用是合理的。即便如此,我怀疑您的用户群没有使用 TMUX,所以这可能是由于资源的原因。
我无法说出真正的原因;但如果你想节省服务器上的资源,最简单的方法是让用户仅在本地或虚拟机/WSL2 中运行程序。你当然已经知道了。
理论答案:如果您可以实现或请求重写/改编 python 程序(这是一个很大的假设),请将其移至服务器-客户端模型。在本地运行图形界面(前端)并向服务器端(后端)发出请求,以便(可能)在那里进行更快的计算。同时,也许可以将整个事情实现为一个网络应用程序,并且只需 Firefox 就足够了。