線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3448
推到 Plurk!
推到 Facebook!

請問在三層式架構中, APP Server 有連線數目的限制嗎?

答題得分者是:william
q_angus
一般會員


發表:1
回覆:3
積分:0
註冊:2008-05-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-29 17:26:42 IP:61.218.xxx.xxx 訂閱
小弟參考 Delphi 6 徹底研究(陳燦煌著)書中的範例, 使用 Delphi 7.0 Enterprise 寫了一個三層式架構的程式。其中 App server 在 Remote Data Module 的設定是: Multiple Instance, Treading Model 是 Apartment.。在程式裡並利用 RemoteDataModuleCreate 及 RemoteDataModuleDestroy 的事件來記錄目前的前端 Client 的連線數目。這支 App Server 只有在 Client 端執行時, 才會被啟動執行。
一般而言, 前端 Client 連上 App Server 都很正常, 但是當第十個 Client 連線時(也就是目前已有九個連線), 這第十個 Client 就無法連線上去, 甚至會導致執行 App Server 的那台電腦好像當掉的感覺, 必須將 App Server 的 Process Kill 掉之後, 那台電腦才能正常運作。這個狀況似乎屢試不爽, 不論是哪個 Client, 只要它不湊巧排第十個, 就無法連上線。Client 端除了程式本身之外, 就只有將 MIDAS.DLL 放在 C:\Windows\System32 目錄下。
請教版上的各位前輩高手: 是否小弟有哪個參數沒設定正確, 才導致 App Server 無法同時連線十人? 還是說有沒有方法可以突破這個限制?
RootKit
資深會員


發表:16
回覆:357
積分:419
註冊:2008-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-29 21:03:14 IP:61.222.xxx.xxx 訂閱
跟 APP SERVER 無關
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-30 08:47:49 IP:147.8.xxx.xxx 未訂閱
因為 Windows 不是 Server 版吧

http://support.microsoft.com/kb/314882
q_angus
一般會員


發表:1
回覆:3
積分:0
註冊:2008-05-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-30 08:57:10 IP:61.218.xxx.xxx 訂閱
小弟的 App Server 的確是 run 在 Server 上, 是 Win2K Server.
一直令我困擾的就是: 為何 1~9 個 Client 端連上線都沒問題可以正常運作, 可是偏偏第十個以後就有問題, 實在詭異
不曉的各位前輩還有沒有其他的想法? 感激不盡~
RootKit
資深會員


發表:16
回覆:357
積分:419
註冊:2008-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-30 15:14:43 IP:61.222.xxx.xxx 訂閱
Midas 並無連線限制。
查一下是否為資料庫連線限制或為 Windows 限制
q_angus
一般會員


發表:1
回覆:3
積分:0
註冊:2008-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-06-02 09:22:07 IP:61.218.xxx.xxx 訂閱
procedure TProj_ApSrv1.RemoteDataModuleCreate(Sender: TObject);
begin
// 增加一位前端的上線者(呼叫 MainForm 上的程序)
MainForm.UpdateClientCount(1);
end;
procedure TMainForm.UpdateClientCount(Incr: Integer);
begin
FClientCount := FClientCount Incr;
lblClientCount.Caption := IntToStr(FClientCount);
end;
上面這兩段程式是我的 App Server 中關於顯示連線數目的程式碼。我在版上爬文時, 發現有網友提問: 計算上線人數的問題, 他的程式 Client 端 connect 時, App Server在執行 Label1.Caption:=IntToStr(FCOUNT); 就會當掉, 可是 Mark 掉這一行就能正常執行, 網友 G01 回覆
因為VCLUI展現部分,並沒有做到Thread Safe 的關係
最簡單的方式是省略掉這一行... Form的事件去處理(例如放個Timer去更新)
由於這位網友的寫法和我幾乎一樣, 差別是我能連上九位使用者, 於是我也 Mark 掉lblClientCount.Caption := IntToStr(FClientCount) 改使用 Timer 來更新人數。果然, 去除掉這一行, 就能連線超過十人, 真是太感謝有這個版面讓大家能意見交流! 也謝謝大家的回覆, 感恩啊~
系統時間:2017-10-22 17:59:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!