使用哪种Delphi技术?

时间:2010-08-07 16:23:45

标签: delphi architecture client-server

我有一个用Delphi编写的客户端/服务器应用程序。基本上所有应用程序正在做的是在服务器应用程序和连接的客户端之间传输xml数据流。我目前正在使用Indy TIdTCPServer组件。但是服务器端应用程序在我的部分安装中不断崩溃。调试非常困难。所以我想知道是否有一些我应该使用的“架构”,它可以完成所有tcp / ip连接管理和数据库连接池,让我可以专注于业务逻辑。

以下是更多详情:

  • 客户端必须保持“持久”连接。有时服务器必须通知并向所有连接的客户端发送数据。
  • 客户使用无线空中卡从笔记本电脑连接。因此网络“下降”非常普遍。
  • 后端数据库是SqlServer。
  • 一次可同时连接100台计算机。 当服务器获得新连接(TCPServer.OnConnect)时,我实例化我自己的包含它自己的SqlServer数据库连接的对象。当删除tcp连接时,我依次释放这些对象(以及相关的数据库连接)。
  • 客户端应用程序内置了一个TTimer。他们经常将心跳发送到服务器。如果他们“丢弃”/“丢失”他们的连接,他们会在网络恢复后自动建立新连接。

有人对这里最好的方法/架构有什么建议吗? 我认为Indy组件可以工作,但同时感觉我在管理连接方面“重新发明轮子”。

6 个答案:

答案 0 :(得分:6)

我知道的三个组件集将为您处理客户端服务器应用程序的细节技术方面:

您可能需要重新编写应用程序以利用这些组件集的工作方式,但假设您已经正确分离了不应该太麻烦的层,并且会为您带来经过良好测试和广泛使用的优势客户端服务器工作的代码。

答案 1 :(得分:1)

如果您需要一些轻型TCP / IP组件,请查看我们的SynCrtSock单元。

您将找到用于创建IP客户端和服务器的低级类。 我们在其中一个应用程序中实现了TCP / IP和UDP / IP。

还有一个THttpServer类,它实现了一个HTTP / 1.1服务器。因此它遵循HTTP / 1.1连接管理。还有一个可选的压缩,在80以外的端口上使用HTTP / 1.1并不是一个坏主意。而HTTP / 1.1的优点在于它可以通过防火墙,并且可以通过代理轻松地在另一个HTTP服务器(如IIS或Apache)上进行VPN或托管。如果您在基于Linux的解决方案下需要这样的服务器,甚至还有一个FastCGI类。 当然,THttpClientSocket类在客户端类上也是如此。

我们使用这些类将HTTP / 1.1连接添加到我们的开源SQLite3 RESTful框架 - http://synopse.info/forum/viewforum.php?id=2

有关SynCrtSock设备的信息,请参阅http://synopse.info/fossil/artifact?name=722e896e3d7aad1fe217b0e2e7903483e66d66d1。开源,从Delphi 7到Delphi 2010。

答案 2 :(得分:1)

Misha Charrett的CSI Application Framework几乎涵盖了你所要求的内容。

它是一个开源Delphi框架,其核心是分布式消息传递和线程框架,允许XML消息从客户端传递到服务器和服务器到客户端。

它可以处理断开连接/重新连接,高客户端数量以及可以处理SQL服务器的可选虚拟数据库(或者您可以使用现在正在使用的相同SQL Server访问)。

它还不是特别有名,但我可以告诉你,它在过去几年里一直在积极开发,作者Misha非常热衷于帮助任何有兴趣在其应用中使用它的人。

答案 3 :(得分:1)

好吧,它可能需要完全重写你的大部分C / S代码,但是你可以尝试使用COM +解决方案,而不是使用Indy组件。基本上,您将创建一个将安装在服务器上的COM +组件,您的客户端应用程序将连接到此客户端并直接调用此组件的功能。它将具有将由Windows本身处理的事务管理,并且处理事务也是如此。在技​​术上也可以创建事件,这将允许服务器对客户端进行回调,尽管这会使事情变得更复杂。
我不认为这个解决方案对你有用,除非你在Windows中有很多COM开发经验和/或你有足够的勇气尝试不同的东西。
在过去,我遇到了类似的问题,数百个客户端必须连接到单个服务器,执行各种数据库事务。它有一个陡峭的学习曲线,但我和我的团队成功地完成了工作,一旦我们理解了这项技术,它就形成了一个非常稳定可靠的解决方案,该解决方案确实可以让多达500名用户同时进行更新和其他操作。 - 极端压力测试。但同样,学习诅咒是陡峭的,所以它可能不是你正在寻找的解决方案 (尽管如此,COM +将使用许多内置于Windows中的功能,如事务管理,数据库池等等。)

答案 4 :(得分:0)

如果你使用Indy,每个连接将等于一个线程。

无论如何,我建议连接到MSSQL以使用来自Devart http://www.devart.com/sdac/的SDAC,并建议连接层使用基于http://www.torry.net/authorsmore.php?id=7131的I / O完成端口的HPScktSrvr(我不知道是什么更新VCL中的TThread更改所需的更改。 您可以在THPServerClient中构建客户端类,将新类设置为服务器ClientClass,框架将自动为您创建新客户端。

答案 5 :(得分:0)

您可能还想查看ICS / Midware组合:http://www.overbyte.be/