在非浏览器分布式应用程序中传输数据(从服务器到/从客户端到/从客户端)

时间:2012-12-22 17:55:44

标签: distributed-computing distributed-system

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

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

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

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

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

  4. 我确信有更好的方法可行。请您告诉我上述哪种方法最合适?或者如果有更好的方法,请告诉我。

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

1 个答案:

答案 0 :(得分:0)

选项3可能无效。大多数人都拥有自己的机器 防火墙或做NAT的路由器。在这种情况下,通常无法从公共互联网访问正在侦听请求的服务器。

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

但是,只要是登录服务器并发送数据的服务器,就可以在客户系统上安装服务器。

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

    tail -f csv_file | send_data_home

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