【发布时间】:2009-06-03 13:09:12
【问题描述】:
我们将有状态的 DataSnap 服务器用于一些业务逻辑任务,并提供客户端数据集数据。
如果我们必须更新服务器来修改业务规则,我们将新版本复制到一个新的空文件夹并注册(取决于 Delphi 版本,只需启动或运行 TRegSvr 实用程序即可)。
即使旧服务器实例正在运行,我们也可以这样做。但是,注册新版本后,所有新的客户端连接仍将使用当前正在运行的(旧)服务器实例。所有客户端都必须先断开连接,然后新服务器将用于下一个客户端。
有没有办法在注册后立即将所有新客户端连接定向到新服务器?
(我知道新的或更改的方法签名也需要更改并重新启动客户端,但这个问题是关于不影响接口的内部修改)
我们使用的是 Socket 连接,所有客户端共享同一个服务器应用程序(只打开一个应用程序窗口)。在早期,我们使用了远程数据模块的不同配置,这导致每个客户端有一个应用程序窗口。也许这可能是一个解决方案? (因为每个新客户端都会启动当前注册的可执行文件)
更新:Delphi XE 是否为“热部署”(更新的服务器)提供一些支持?我们目前使用 Delphi 2009,但如果它提供更轻松的“热部署”实施,我们将升级到 XE。
【问题讨论】:
-
有趣的问题。答案取决于您的服务器实例是如何创建和管理的,以及它们是有状态的。您使用哪种交通工具?
-
您使用的是哪个 Delphi/DataSnap 版本? datasnap/D2009 有很多内部变化。解决您的问题需要对 2009 年之前/之后的服务器/客户端有不同的看法......总之,这需要您让事情发生,因为两者都没有为这种情况提供开箱即用的解决方案。
-
想知道您是否仍然对此感兴趣...因为您没有回答我之前的问题。 :)
-
抱歉,我忘记添加评论以通知您我上次的编辑:我们目前使用 Delphi 2009,但如果它提供更轻松的“热部署”实施,将升级到 XE。
标签: delphi delphi-2009 delphi-2010 datasnap delphi-xe