我们使用有状态的 DataSnap 服务器来执行某些业务逻辑任务,并提供客户端数据集数据。
如果我们必须更新服务器来修改业务规则,我们将新版本复制到新的空文件夹中并注册它(取决于 Delphi 版本,只需启动或运行 TRegSvr 实用程序)。
即使旧服务器实例正在运行,我们也可以执行此操作。然而,注册新版本后,所有新的客户端连接仍将使用当前正在运行的(旧)服务器实例。所有客户端必须首先断开连接,然后新服务器将用于下一个客户端。
有没有办法将所有新客户端连接定向到新服务器,注册后立即?
(我知道新的或更改的方法签名也需要更改并重新启动客户端,但这个问题是关于不影响接口的内部修改)
我们使用 Socket 连接,所有客户端共享同一个服务器应用程序(仅打开一个应用程序窗口)。早期,我们使用了远程数据模块的不同配置,这导致每个客户端只有一个应用程序窗口。也许这可以是一个解决方案? (因为每个新客户端都会启动当前注册的可执行文件)
更新:Delphi XE 是否为(更新服务器的)“热部署”提供一些支持?我们目前使用 Delphi 2009,但如果 XE 能够更轻松地实现“热部署”,我们将升级到 XE。
您可以将您的应用程序服务器分成两个新服务器,一个是一个简单的代理对象,将所有方法(并且可选地包含状态信息,如果有)重定向到实际实现您的业务逻辑的第二个服务器。您还需要在代理服务器中实现“静默重新连接”功能,以便在您决定随时更换业务应用程序服务器时不打扰连接的客户端。我自己以前从未做过这样的设计,但希望这个想法很清楚
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)