rest - Delphi REST客户端/服务器(网络经纪人)+数据库+同时客户端请求
问题描述
我是 REST 开发的新手,我正在创建一个简单的 REST API 来从客户端请求数据库值。我使用了“Delphi Web 服务器应用程序”项目助手(使用 TIdHTTPWebBrokerBridge 和创建不同“操作”的 WebModule 的那个)。它工作正常,我可以向客户提出请求。
服务器 WebModule 包含一个 FDConnection 和一些 FDQuery 组件来进行数据库(MySQL)查询,每个 Action 执行一个特定的查询,并通过请求参数获得特定的参数。
客户端应用程序使用 TRESTResponse、TRESTRequest、TRESRResponse 组件来发送/接收数据。
例如:
- 客户端请求服务器为特定用户提供一些值,发送“user = user1”和“passwd = ***”作为请求参数。
- 服务器执行查询“select * from xxx where user = user1 and passwd = .......”并将响应发送给客户端。
每个查询都是“用户特定的”。
好的,它有效,但由于我的休息/网络经纪人功能无知,现在我有些疑虑。
如果一次发出数千个请求怎么办?服务器是否会因为 FDQuery 游标在另一条记录中而响应不正确的数据?或者网络经纪人是否为每个请求创建查询没有问题?
在运行时为每个请求创建 FDQuery 并在请求完成后销毁它会更好吗?
我昨天做了一个简单的测试,运行三个客户端应用程序实例,同时向服务器发送 300 个请求(每个客户端 100 个),它工作正常,接收到正确的数据,但我不知道这是否足够保证。
这是(Delphi Web 服务器应用程序)创建服务器的正确方法吗?与 DataSnap 有什么区别?
有什么建议吗?
解决方案
在 Datasnap 架构中(有几种风格,但它们都有一个共同的架构),“服务器”为每个客户端连接制作 1 个 ServerMethodsUnit 副本。这是ServerClass.LifeCycle
设置为Session
。因此,每个客户端都能够执行服务器方法并将结果返回给它,而与任何其他客户端可能请求的内容无关。
在您的情况下,每个ServerMethodsUnit
都有自己的FdConnection
,FdQuery
依此类推,无论您将设计时组件放在那里还是在运行时实例化它们,结果都是一样的。
此处的限制将是运行 Datasnap/WebBroker 应用程序的硬件。(网络带宽、RAM、硬盘速度等)
在我看来,Datasnap(REST、DBX、Standalone、ISAPI、Apache、Linux)是客户端/服务器开发的良好基础。
推荐阅读
- azure-data-factory - Dynamic name of Spark notebook in Notebook activity
- java - What is the minimum number of test cases for edge and condition coverage in this example?
- python - 在 Python Selenium (Mac OS) 中使用向下箭头键
- macos - 如何更改在 pgrep 中显示的应用程序名称?
- python - 带有读取和随机模块的 Python 密码生成器
- javascript - Binance - 通过 WebSockets 获取所选硬币的当前价格
- javascript - 如何将承诺转换为异步等待
- javascript - 从 Promise 返回一个特定的字符串
- python - 在python中隐藏子进程搜索信息
- arrays - 将数组插入二进制文件的函数