繁体   English   中英

使用哪种Delphi技术?

[英]Which Delphi technology to use?

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

这里有更多细节:

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

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

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

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

如果您需要一些轻型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。

Misha Charrett的CSI应用框架几乎涵盖了您所要求的内容。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM