0

我在服务器上有一个长时间运行的 Python 程序,它已经在一个串行端口上侦听消息并将它们转发到另一个串行端口。

我需要做什么才能让该程序接受来自网络服务器的数据(最终从笔记本电脑上的网络浏览器获取数据)?

到目前为止我看到的选项是:

  • flask() “ 与服务器上运行的 python 程序通信”服务器上的解决方案似乎对我不起作用,因为(我可能做错了)长时间运行的 Python 程序似乎无法获取端口 80,我猜测是因为 Web 服务器已经在端口 80 上运行(服务于其他页面)。

  • 有一个将数据写入文件的 CGI 脚本,而长时间运行的脚本会从该文件中读取数据。我有点不愿意在闪存磨损可能是一个问题的系统上执行此操作。

  • 不知何故(?)将长时间运行的脚本转换为 FastCGI 脚本,其中包括它曾经做过的所有事情以及从 Web 服务器接受数据的新内容。

  • 不知何故(?)将长时间运行的脚本转换为 WSGI 脚本,其中包括它曾经做过的所有事情以及从 Web 服务器接受数据的新内容。

  • 编写一个简短的 web 脚本,让 web 服务器启动,它使用 asynchat / asyncore / sockets / twisted与一个长时间运行的脚本进行通信,这似乎是为两台不同计算机之间的通信而设计的,因此在长时间之间交谈时似乎有点过分了。运行 Python 脚本和运行在同一台服务器上的 Web 服务器(可能在它们之间有一个短时间 CGI 脚本或 FastCGI 脚本)。

  • 也许还有其他选择?

Web 服务器是否有标准的“pythonic”方式将数据传递给已经启动并运行的 Python 程序?(而不是更常见的 Web 服务器启动Python 程序并将数据传递给新启动的程序的情况)。

(我怀疑不相关的细节:我的服务器在 Beaglebone Black 上运行的 Ubuntu Linux 上运行 Lighttpd)。

(也许这个问题应该移到https://softwareengineering.stackexchange.com/?)

4

1 回答 1

0

您可以设置您的 python 进程以使用任何其他端口(fe 8091)。然后配置您的网络服务器以使用 proxypas 将某些(或所有)请求转发到该端口。阿帕奇的例子:

<VirtualHost yourdomain.for.python.thread>
    ServerName  localhost
    ServerAdmin webmaster@example.com

    ProxyRequests off
    ProxyPass * http://127.0.0.1:8091
</VirtualHost>

我以前这样做是为了快速让 Django 服务器处于开发模式以通过网络服务器显示页面。如果您真的想提供 html 内容,这不是最有效的方法。

于 2014-08-08T08:40:13.540 回答