具有向后兼容性的数据快照维护和开发

Posted

技术标签:

【中文标题】具有向后兼容性的数据快照维护和开发【英文标题】:datasnap maintenance and developing with backwards compatiblity 【发布时间】:2015-02-17 08:48:08 【问题描述】:

我正在开发一个 delphi xe5 datasnap 客户端服务器应用程序。在服务器中,我创建了几种带有参数的方法,并且我有一些远程数据集提供程序。我在客户端使用 tcp/ip 作为协议和 TSQLConnection。我已经在 TSQLConnection 中使用向导生成了客户端类。

到目前为止,一切正常。

现在我正在考虑以下几点:

当我继续开发服务器方法时,我必须选择什么方法来为我的客户保持向后兼容性。我不可能同时更新所有客户端。将第一个客户端和最后一个客户端更新到相同版本可能需要很长时间。

    当我想在服务器方法中添加额外(或删除)参数时该怎么办?还是想更改参数的数据类型? 当我想添加额外的服务器方法时该怎么办? (这应该不是问题吧?) 当我在服务器组件中更改数据集中的字段时该怎么办? 我可以在同一个 IP 地址和同一个端口号上运行多个版本的 datasnap 服务器组件吗?有子版本/地址吗? 我已经阅读了一些关于在运行时动态生成客户端类的内容,但我找不到关于此的任何详细示例。

我希望我已经为你清楚地输入了我的问题。

谢谢提前帮助!

【问题讨论】:

相关:How can I update a DataSnap server while clients are still connected? 【参考方案1】:

我不是 Datasnap 方面的专家,但我可以提出以下建议:

只需右键单击 SQLConnection 到 datasnap 并单击“生成 Datasnap 客户端类”即可完成问题 1 - 3。

这将在客户端重新创建客户端类单元,您将获得更新的方法以及您的更改。

4) 我不相信你可以在同一个端口号上运行两台服务器。您可以使用不同的端口号在同一个 IP 地址上运行。

5) 我不能说我遇到了为 datasnap 动态生成的类。

我也在 Datasnap 的学习阶段,希望有人更了解您的问题。

【讨论】:

关键要求是“我不可能同时更新所有客户端”,问题1到3讨论保持API在不同客户端版本之间兼容,iiuc 同一台计算机上的两台服务器可以使用同一个端口(参见这个关于Socket options SO_REUSEADDR and SO_REUSEPORT的SO问题)【参考方案2】:

最简单但绝对不是最优雅的解决方案是在不同端口上运行多个服务器。

例如:您的第一台服务器使用端口 1000,所有当前客户端都将使用 1000。您的下一个破坏当前客户端的构建将在端口 1001 上运行,所有新客户端都将使用此端口。

将所有旧客户端更新为新客户端后,您可以停用端口 1000 上的服务器。

【讨论】:

如果 DataSnap 需要更多端口,则客户端防火墙需要额外配置。 HTTP 可以用作 Datasnap 的传输吗?如果是,那么我会将我的两台服务器映射到不同的 URL 路径,例如使用反向代理的 https://example.com/myapp/v1https://example.com/myapp/v2

以上是关于具有向后兼容性的数据快照维护和开发的主要内容,如果未能解决你的问题,请参考以下文章

MediaSession 和 MediaSessionManager 是不是具有向后兼容性?

Apple iOS 是不是支持向后兼容?

我可以添加具有向后兼容性的 [FromBody] 参数吗?

EF 自动迁移向后兼容

iOS 7状态栏半透明,具有向后兼容性

从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性