簡體   English   中英

使用哪種Delphi技術?

[英]Which Delphi technology to use?

我有一個用Delphi編寫的Client / Server應用程序。 基本上所有應用程序正在做的是在服務器應用程序和連接的客戶端之間傳輸xml數據流。 我目前正在使用Indy TIdTCPServer組件。 但是服務器端應用程序在我的部分安裝中不斷崩潰。 調試非常困難。 所以我想知道是否有一些“架構”,我應該利用它來完成所有tcp / ip連接管理和數據庫連接池,讓我專注於業務邏輯。

這里有更多細節:

  • 客戶必須保持“持久”連接。 有時服務器必須通知並向所有連接的客戶端發送數據。
  • 客戶使用無線空中卡通過筆記本電腦連接。 因此網絡“下降”非常普遍。
  • 后端數據庫是SqlServer。
  • 一次可以同時連接100台計算機。 當服務器獲得新連接(TCPServer.OnConnect)時,我實例化我自己的包含它自己的SqlServer數據庫連接的對象。 當刪除tcp連接時,我依次釋放這些對象(以及相關的數據庫連接)。
  • 客戶端應用程序內置了TTimer。 他們經常將心跳發送到服務器。 如果他們“丟棄”/“丟失”他們的連接,他們會在網絡恢復后自動建立新連接。

有人對這里最好的方法/架構有任何建議嗎?
我認為Indy組件可以工作,但同時感覺我在管理連接方面“重新發明輪子”。

我知道的三個組件集將為您處理客戶端服務器應用程序的細節技術方面:

您可能必須重新編寫應用程序以利用這些組件集的工作方式,但假設您已經正確分離了不應該太麻煩的層,並且會為您提供經過充分測試和廣泛使用的代碼的優勢客戶服務器工作。

如果您需要一些輕型TCP / IP組件,請查看我們的SynCrtSock單元。

您將找到用於創建IP客戶端和服務器的低級類。 我們在其中一個應用程序中實現了TCP / IP和UDP / IP。

還有一個THttpServer類,它實現了一個HTTP / 1.1服務器。 因此它遵循HTTP / 1.1連接管理。 還有一個可選的壓縮,在80以外的端口上使用HTTP / 1.1並不是一個壞主意。 而HTTP / 1.1的優點在於它可以通過防火牆,並且可以通過代理輕松地在另一個HTTP服務器(如IIS或Apache)上進行VPN或托管。 如果您在基於Linux的解決方案下需要這樣的服務器,甚至還有一個FastCGI類。 當然,THttpClientSocket類在客戶端類上也是如此。

我們使用這些類將HTTP / 1.1連接添加到我們的開源SQLite3 RESTful框架 - http://synopse.info/forum/viewforum.php?id=2

有關SynCrtSock單元的信息,請參見http://synopse.info/fossil/artifact?name=722e896e3d7aad1fe217b0e2e7903483e66d66d1 開源,從Delphi 7到Delphi 2010。

Misha Charrett的CSI應用框架幾乎涵蓋了您所要求的內容。

它是一個開源Delphi框架,其核心是分布式消息傳遞和線程框架,允許從客戶端到服務器和服務器到客戶端的XML消息傳遞。

它可以處理斷開連接/重新連接,高客戶端數量以及可以處理SQL服務器的可選虛擬數據庫(或者您可以使用現在正在使用的相同SQL Server訪問)。

它還不是特別有名,但我可以告訴你,它在過去幾年里一直在積極開發,作者Misha非常熱衷於幫助那些有興趣在他們的應用程序中使用它的人。

好吧,它可能需要完全重寫你的大部分C / S代碼,但不是使用Indy組件,你可以嘗試使用COM +解決方案。 基本上,您將創建一個將安裝在服務器上的COM +組件,您的客戶端應用程序將連接到此客戶端並直接調用此組件的功能。 它將具有將由Windows本身處理的事務管理,並且處理事務也是如此。 技術上也可以創建事件,這將允許服務器對客戶端進行回調,盡管這會使事情變得復雜一些。
我不認為這個解決方案對您有用,除非您在Windows中有很多COM開發經驗和/或您有足夠的勇氣去嘗試不同的東西。
在過去,我遇到了類似的問題,數百個客戶端必須連接到單個服務器,執行各種數據庫事務。 它有一個陡峭的學習曲線,但我和我的團隊成功地完成了工作,一旦我們理解了這項技術,它就形成了一個非常穩定可靠的解決方案,該解決方案確實可以讓多達500名用戶同時進行更新和其他操作。 - 極端壓力測試。 但同樣,學習詛咒是陡峭的,所以它可能不是你正在尋找的解決方案。
(盡管如此,COM +將使用許多內置於Windows中的功能,如事務管理,數據庫池等等。)

如果你使用Indy,每個連接將等於一個線程。

無論如何,我建議連接到MSSQL以使用Devart http://www.devart.com/sdac/中的 SDAC,並建議連接層使用基於I / O完成端口的HPScktSrvr來自http://www.torry.net /authorsmore.php?id=7131 (我不知道在更新的VCL中,TThread更改需要進行哪些更改)。 您可以在THPServerClient中構建客戶端類,將新類設置為服務器ClientClass,框架將自動為您創建新客戶端。

您可能還想看看ICS / Midware組合: http ://www.overbyte.be/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM