0

所以我们有命令行脚本(用 Python 编写),它位于客户机器上,每 24 小时后以 CSV 格式向我们发送数据。现在,我们实际上希望能够告诉客户随时向我们发送数据。几乎所有客户都在 MS Windows 机器上,要求我们可以在客户机器上安装很少的软件(大多数人甚至无法登录到客户机器,只有少数人可以)。

我实际上不确定如何最好地解决这个问题。可能是以下三种可能的方式(但正在寻找更好的方式)

  1. 我们用 Python 制作一个守护进程并将其安装在客户机器上。守护进程与我们的服务器对话,我们发回配置信息。在该配置信息中,我们发回“睡眠持续时间”。所以守护进程向我们发送数据,然后在“睡眠持续时间”变量中定义的秒数进入睡眠状态。一旦限制结束,守护进程 ping 我们,我们再次发回配置信息。冲洗并重复。

  2. 我们在客户机器上安装一个脚本,它每小时运行一次。最后,我们存储了客户应该多久向我们发送一次数据(24 小时、12 小时等),当脚本与我们交谈时,我们确定已经过去了多长时间以及该脚本是否应该发送给我们数据?如果是时候,那么我们告诉脚本向我们发送数据。

  3. 我们安装了一个非常小的服务器端(Django 或 Flask)应用程序,它在客户机器上运行。每当我们需要数据时,我们都会向客户机器发送请求,我们的小型服务器端应用程序会为我们服务。为此,我们可能会要求我们的客户为我们保留一个端口(不确定有多少客户实际允许这样做)

我相信有更好的方法可能。您能告诉我以上哪种方法最合适吗?或者请让我知道是否有更好的方法。

我非常感谢所有见解,提前感谢所有帮助。

4

1 回答 1

0

选项 3 可能不起作用。大多数人的机器都在防火墙或路由器后面进行 NAT。在这种情况下,通常无法从公共 Internet 访问正在侦听请求进入的服务器。

如果他们有静态 IP 地址并且如果服务器可以从公共互联网访问,那么端口扫描器会检测到它并可能尝试做不受欢迎的事情。您真的不会有人侵入您的客户系统并对其造成严重破坏。如果可能,请避免使用此选项。

但是,在客户系统上安装服务器是安全的,只要它是登录到您的服务器并发送数据的服务器。

更好的解决方案是拥有一个在生成数据时不断向服务器提供数据的应用程序。是相对容易做相当于

    tail -f csv_file | send_data_home

其中 send_data_home 是在客户系统上运行的程序。这样影响最小。csv 文件的创建不受影响。send_data_home 登录到您的服务器并在生成数据时发送数据。

于 2012-12-24T04:46:01.543 回答