首页 > 解决方案 > Delphi REST客户端/服务器(网络经纪人)+数据库+同时客户端请求

问题描述

我是 REST 开发的新手,我正在创建一个简单的 REST API 来从客户端请求数据库值。我使用了“Delphi Web 服务器应用程序”项目助手(使用 TIdHTTPWebBrokerBridge 和创建不同“操作”的 WebModule 的那个)。它工作正常,我可以向客户提出请求。

服务器 WebModule 包含一个 FDConnection 和一些 FDQuery 组件来进行数据库(MySQL)查询,每个 Action 执行一个特定的查询,并通过请求参数获得特定的参数。

客户端应用程序使用 TRESTResponse、TRESTRequest、TRESRResponse 组件来发送/接收数据。

例如:

每个查询都是“用户特定的”。

好的,它有效,但由于我的休息/网络经纪人功能无知,现在我有些疑虑。

如果一次发出数千个请求怎么办?服务器是否会因为 FDQuery 游标在另一条记录中而响应不正确的数据?或者网络经纪人是否为每个请求创建查询没有问题?

在运行时为每个请求创建 FDQuery 并在请求完成后销毁它会更好吗?

我昨天做了一个简单的测试,运行三个客户端应用程序实例,同时向服务器发送 300 个请求(每个客户端 100 个),它工作正常,接收到正确的数据,但我不知道这是否足够保证。

这是(Delphi Web 服务器应用程序)创建服务器的正确方法吗?与 DataSnap 有什么区别?

有什么建议吗?

标签: restdelphiwebbroker

解决方案


在 Datasnap 架构中(有几种风格,但它们都有一个共同的架构),“服务器”为每个客户端连接制作 1 个 ServerMethodsUnit 副本。这是ServerClass.LifeCycle设置为Session。因此,每个客户端都能够执行服务器方法并将结果返回给它,而与任何其他客户端可能请求的内容无关。

在您的情况下,每个ServerMethodsUnit都有自己的FdConnectionFdQuery依此类推,无论您将设计时组件放在那里还是在运行时实例化它们,结果都是一样的。

此处的限制将是运行 Datasnap/WebBroker 应用程序的硬件。(网络带宽、RAM、硬盘速度等)

在我看来,Datasnap(REST、DBX、Standalone、ISAPI、Apache、Linux)是客户端/服务器开发的良好基础。


推荐阅读