2012-08-06 79 views
3

我有一個很大的DataSnap服務器,它將全天候運行,它將替代當前運行的MIDAS(COM)服務器。現在我面臨着如何更新服務器而不必強制斷開所有連接的客戶端的問題。如何將DataSnap客戶端連接指向各種DS服務器?

隨着目前的midas服務器(順便說一下,沒有巨大的流量服務),我只是等到沒有連接,然後關閉服務器應用程序並替換exe文件。如果服務器處於「關閉」狀態時發生新的連接,它將成爲COM對象,它將被操作系統「拉高」,從而不會給客戶端帶來任何問題。新的DataSnap體系結構不再基於COM(太棒了!),但這樣我就失去了停止服務器而不會導致新連接失敗的機會。

我認爲某種TCP「代理」或「隧道」可以解決我的問題,所以我可以簡單地將一個新的服務器exe文件放在某個地方,並讓該「代理」將客戶端連接重定向到新的DS服務器。我試過TIdMappedPortTCP,但它不斷掛在服務器 - 客戶端對話框的隨機點上。

任何想法?

編輯:出於效率原因,我在純TCP/IP傳輸上使用DataSnap,所以http代理不適合我的具體情況。

+0

對於一些想法請參閱http://stackoverflow.com/questions/944648/how-can-i-update-a-datasnap-server-while-clients-are-still-connected – mjn 2012-08-06 08:01:51

+0

你可能想看看在TDSHTTPService.HttpServer.TunnelService事件中使用內置的隧道,使您可以使用DataSnap實現FailOver場景。您也可以閱讀Andreas Lanusse的[在datasnap 2010中實現故障轉移和負載平衡](http://www.andreanolanusse.com/en/implementing-failover-and-load-balancing-in-datasnap-2010/)得到一些想法。 – jachguate 2012-08-06 11:04:19

+0

感謝您的意見。不幸的是,第一個建議談到了舊的datasnap架構,這是基於我正在使用的** midas **的架構(雖然有些想法也適用於新的DataSnap架構,但在我的情況下並不適用)。第二個建議非常有趣,但僅適用於HTTP傳輸上的DataSnap,而我出於效率原因使用純TCP/IP傳輸。所以這兩種解決方案都不適用於我的具體情況我會編輯我的問題,以更具體。 – Bozzy 2012-08-06 15:45:25

回答

1

也許你應該看看相當於命名服務?可以像創建方法調用的Datasnap服務器一樣簡單,並返回「主」服務器的IP地址。然後,當您想要刪除服務器進行維護時,您可以更改命名服務器分配的IP地址,以便將新客戶端路由到它。當您的主服務器備份時,您可以更換IP。

您仍然存在引導問題(即他們如何找到命名服務器的IP),但這可能與在客戶端上配置文件中擁有幾個IP地址一樣簡單,如果第一個失敗回落到第二位。

相關問題