从Windows应用程序向服务应用程序发送大量数据

时间:2012-02-15 02:21:10

标签: delphi sockets service delphi-xe2 indy

我正在构建一个具有一些远程桌面功能的系统。客户端被认为是共享其桌面的每台计算机,该服务器被视为具有数据库的中央服务器,该数据库接收所有多个桌面的图像。在客户端,我想构建两个项目:Windows服务应用程序和VCL表单应用程序。每个客户端应用程序可能会在计算机上的不同用户帐户下运行,因此可能会同时运行多个客户端应用程序,并且它们都将其图像发送到此客户端服务,然后将其中继到中央服务器。

该服务将负责连接服务器,发送图像和接收鼠标/键盘事件。在后台运行的应用程序将连接到此服务,并将屏幕截图传输到服务中。目标是一个服务正在运行,而多个“客户端”能够连接到它并发送其桌面映像。该服务将连接到“中央服务器”,该服务器从不同的“客户端”接收所有这些不同的屏幕截图。然后,图像将被保存并记录或重定向到可能正在查看“客户”的任何“仪表板”。

问题是我应该使用什么方法将客户端应用程序连接到客户端服务以发送图像?它们将在同一台计算机上运行。我需要两种能力来发送简单的命令包以及流传​​输一大块图像。我即将使用Indy组件(TIdTCPServer等),但我确信必须有一种更简单,更清洁的方法。我也在项目的其他地方使用Indy组件。

这是我正在瞄准的整个系统的图表 - 我只是担心最右边和最左边的部分 - 应用程序连接到同一台计算机内的服务。正如您所看到的,由于有很多层,我需要确保我使用的任何方法都足够强大,以适应流式传输大量图像数据。

System Structure

2 个答案:

答案 0 :(得分:1)

在进程之间进行通信,你可以使用Pipe / Mailslots / Socket,我也认为在发送流文件时共享内存可能是最有效的方式

答案 1 :(得分:1)

我现在已经做了几次,有很多不同的配置。让我轻松的关键是使用负责通信部分的RemObjects SDK。使用控制其状态的线程,我可以连接到可靠的服务器或服务,并且可以将任何内容从状态字节传输到传输数兆字节的数据(建议您使用小块来处理大数据,以便你对错误和流程有更精细的控制)。我现在有一套高可靠性模板,我可以很容易地部署它来制作一个新的变体,它可以通过新的函数调用更新而不会有太多麻烦(我做的第一件事就是在客户端和服务器之间协商版本,这样他们就知道了什么他们可以支持)。因为它都在高级别工作,我的代码只是进行“函数调用”,并且从不担心线路上的格式是什么。同样,我可以在不改变核心逻辑的情况下从二进制格式切换到标准SOAP或其他格式。最后,连接可以是本地的,也可以是同一台机器(我将其用于与后台服务交谈的最终用户应用程序)或局域网或互联网上的机器。全部使用相同的代码。