【问题标题】:Delphi XE2 DataSnap Life-cycle with Android connectionDelphi XE2 DataSnap 生命周期与 Android 连接
【发布时间】:2012-07-27 17:46:19
【问题描述】:

我有一个带有 DSServerClass.LifeCycle=Session 的 DataSnap 服务器(公开 TDSServerModule 的下降类)。

当客户端连接 TDSServerModule 时,它​​会被创建并一直保留在内存中,只要会话存在,就建立了一个 datasnap 连接(隧道)——没关系。

当通过 Android 连接(移动连接)时,TDSServerModule 通过调用(实例)创建/销毁。这将建立一个 REST 连接...

我有一个小演示。

有什么办法解决这个问题...

提前致谢, 佩德罗·洛佩斯

【问题讨论】:

    标签: android delphi session delphi-xe2 datasnap


    【解决方案1】:

    REST 根据定义是无状态的。来自 Server Class LifeCycle 上的文档:

    对于 REST 客户端连接,如果在 服务器类,它的行为类似于 Invocation LifeCycle。

    这是设计使然。你到底是什么问题?

    【讨论】:

    • 谢谢,我的问题是读取一个大数据集。我有愚弄的步骤: 1 - 打开,准备; 2 - 加载 40 行 3 - 重复直到 eof ()
    • 在这种情况下,您必须将状态从客户端传输到服务器。例如,使用输入参数 StartRow 和 EndRow 定义自定义服务器方法,并返回相应的数据集以及其间的所有行。这种技术称为“增量获取”。
    • 但是在每次调用中启动查询会很慢...也许我必须将连接和查询存储在会话变量中...这是一个好方法吗?
    • 很难从正面判断什么是瓶颈。但是,如果移动设备客户端需要数百个数据行,我认为重新考虑设计并不是一个坏主意。无论如何,Alister Christie 有关于“在 DataSnap REST 服务器中保留状态”的精彩视频。 learndelphi.tv/video/064/RestServer.html祝你好运!
    • 不要在会话中存储完整的数据集。您可以使用保存记录的缓存,以便所有会话都可以共享它。否则你的服务器很快就会耗尽内存。尽可能避免使用会话数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2015-09-12
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多