delphi – 如何在客户端仍然连接时更新DataSnap服务器?

我们将有状态DataSnap服务器用于某些业务逻辑任务,并提供clientdataset数据.

如果我们必须更新服务器以修改业务规则,我们将新版本复制到一个新的空文件夹并注册它(取决于Delphi版本,只需启动或运行TRegSvr实用程序).

即使旧的服务器实例正在运行,我们也可以这样做.但是,在注册新版本后,所有新客户端连接仍将使用当前运行的(旧)服务器实例.所有客户端必须先断开连接,然后新服务器将用于下一个客户端.

有没有办法在注册后立即将所有新客户端连接定向到新服务器?

(我知道新的或更改的方法签名也需要更改和重新启动客户端,但这个问题是关于不影响接口的内部修改)

我们正在使用Socket连接,并且所有客户端共享相同的服务器应用程序(只打开一个应用程序窗口).在早期,我们使用了远程数据模块的不同配置,这导致每个客户端有一个应用程序窗口.也许这可能是一个解决方案? (因为每个新客户端都会启动当前注册的可执行文件)

更新:Delphi XE是否为“热部署”(更新服务器)提供了一些支持?我们目前使用Delphi 2009,但如果它更容易实现“热部署”,则会升级到XE.

解决方法

您可以将appserver分成2个新服务器,一个是简单的代理对象,将所有方法(以及可选的包含状态信息)重定向到实际实现业务逻辑的第二个.您还需要在代理服务器中实现“静默重新连接”功能,以便在您决定随时更换业务应用服务器时不会干扰已连接的客户端.从来没有做过这样的设计,但希望这个想法很明确

相关文章

ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c++ 调用, 抽空研究了一下该库的最新版 ,把...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的功能是:将源操作数送到目的操作数中,即:...
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂...
API原型: Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (By...