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

修改自VCL Source的自製CsScktServer(含Source)

 
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-28 10:08:52 IP:211.21.xxx.xxx 訂閱
同主題

報歉,上傳到測試的版本了
以下這個才是正式要發佈的CsScktSrvr....
編輯記錄
G01 重新編輯於 2008-10-28 20:55:37, 註解 無‧
G01 重新編輯於 2008-11-04 05:52:25, 註解 無‧
G01 重新編輯於 2008-11-04 05:54:10, 註解 無‧
G01 重新編輯於 2008-11-04 21:04:25, 註解 無‧
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-28 21:00:49 IP:61.64.xxx.xxx 訂閱
ScktSrvr問題之一在於經由ServerSocket所配置的執行緒,遇到Client端斷線時,它的
執行緒並沒有被釋放, 此外,因為又有做執行緒之間的訊息同步,所以造成整體效率不彰
並容易掛機的原因.....相關程式碼如下:

procedure TSocketDispatcherThread.ClientExecute;
var
Data: IDataBlock;
msg: TMsg;
Obj: ISendDataBlock;
Event: THandle;
WaitTime: DWord;
begin
CoInitialize(nil);
try
Synchronize(AddClient);
FTransport := CreateServerTransport;
try
Event := FTransport.GetWaitEvent;
PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE);
GetInterface(ISendDataBlock, Obj);
if FRegisteredOnly then
FInterpreter := TDataBlockInterpreter.Create(Obj, SSockets) else
FInterpreter := TDataBlockInterpreter.Create(Obj, '');
try
Obj := nil;
(*
if(FTimeout = 0)then WaitTime := INFINITE
else WaitTime := 60000;
*)
//================================================================================
//雖然我們避開了針對各執行緒間進行訊息傳遞的等待時間,但是這是否會對於
//RemoteDataModule之間各Client端造成重大的影響,尚待驗證
while not Terminated and FTransport.Connected do
begin
try
Data := FTransport.Receive(False, 0);
if Assigned(Data) then
begin
FLastActivity := Now;
FInterpreter.InterpretData(Data);
Data := nil;
FLastActivity := Now;
end;
except
//若接收自Client端的訊息發生錯誤時,終止連線
FTransport.Connected := False;
//同時,結束為這個Client端所創建的執行緒!!
self.Terminate;
end;
end;
(* 此段功能為做到執行緒之間訊息的傳遞,
try
case MsgWaitForMultipleObjects(1, Event, False, WaitTime, QS_ALLEVENTS) of
WAIT_OBJECT_0:
begin
WSAResetEvent(Event);
Data := FTransport.Receive(False, 0);
if Assigned(Data) then
begin
FLastActivity := Now;
FInterpreter.InterpretData(Data);
Data := nil;
FLastActivity := Now;
end;
end;
WAIT_OBJECT_0 1:
begin
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
DispatchMessage(msg);
end;
WAIT_TIMEOUT:
begin
if(FTimeout > 0)and((Now - FLastActivity) > FTimeout)then
begin
FTransport.Connected := False;
self.Terminate;
end;//if...end!!
end;
else
DispatchMessage(msg);
end;//case...end!!
except
FTransport.Connected := False;
self.Terminate;
end;
*)
//================================================================================
finally
FInterpreter.Free;
FInterpreter := nil;
end;
finally
FTransport := nil;
end;
finally
CoUninitialize;
Synchronize(RemoveClient);
end;
end;
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-28 22:01:25 IP:61.64.xxx.xxx 訂閱
經過幾次針對SocketConnection與ScktSrvr.exe的測試之後發現,
其造成用戶端阻塞的原因已經不在於頻寬的不足了;這些因素若
不是AppServer的設計不良,就是ScktSrvr.exe阻塞的關係
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-29 06:02:48 IP:61.64.xxx.xxx 訂閱
另外,針對安全的部份;可以在下列的程式碼當中就進行IP的過濾

procedure TSocketDispatcher.GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
var HostStr:string;
begin
//取得連線用戶的IP位址 HostStr := ClientSocket.RemoteHost;
//針對ip進行比對,若符合為被允許的IP,就建立Thread SocketThread := TSocketDispatcherThread.Create(False, ClientSocket,
InterceptGUID, Timeout, SocketForm.RegisteredAction.Checked, SocketForm.AllowXML.Checked);
//否則,就直接關閉遠端的連線-->ClientSocket.Close; end;
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-29 09:52:45 IP:118.169.xxx.xxx 訂閱
感謝分享 ^_^
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-29 10:04:28 IP:203.75.xxx.xxx 未訂閱
感謝分享 1
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-30 20:48:53 IP:61.64.xxx.xxx 訂閱
歡迎大家反映使用TSocketConnection的狀況是否有改善,目前測試CsScktSerer已經非常穩定!!
除了在頻寬不足的網路狀況下反映遲緩之外,還算理想
編輯記錄
G01 重新編輯於 2008-11-01 15:09:34, 註解 無‧
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-12-26 09:28:10 IP:220.136.xxx.xxx 訂閱
 各位好, 目前我使用ClientDataSet搭配scktsrvr.exe遇到一個粉頭痛的問題, 不小得各位先進有沒有相同的經驗及解決方法.

我遇到連續Connect及Disconnect多次後, 在斷線時會停留大概3分多鐘才會回應回來, 讓人感覺程式當掉了.
也就是執行到SocketConnection1.Connected := False;
就停住粉久才回來...
請問有誰知道會是啥問題嗎, 我換過這一版的CsScktSrvr也一樣的狀況.

感謝大家.

===================引 用 G01 文 章===================
歡迎大家反映使用TSocketConnection的狀況是否有改善,目前測試CsScktSerer已經非常穩定!!
除了在頻寬不足的網路狀況下反映遲緩之外,還算理想
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-26 19:35:21 IP:61.64.xxx.xxx 訂閱
或許是IP分享器的問題喔!! 有些IP分享器禁不起連線數量增加時...會有這種情形!!
去找那種BT使用的IP分享器(或乾脆買個高級一點的機器)這種情形會有改善的!!
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-02-26 19:57:31 IP:220.133.xxx.xxx 訂閱
看來應該不是, 因為就是很單純的串在同一個區網下而已
甚至我用自己單機跑Client結結本機自己的ScktServer.exe也會這樣哩~~

===================引 用 G01 文 章===================
或許是IP分享器的問題喔!! 有些IP分享器禁不起連線數量增加時...會有這種情形!!
去找那種BT使用的IP分享器(或乾脆買個高級一點的機器)這種情形會有改善的!!
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-05-22 13:36:13 IP:219.87.xxx.xxx 訂閱
版大你好,請問一下,這個也是一個服務的型態嗎?像之前的socket一樣嗎?可以跟隨著註冊成一個服務嗎?
------
DELPHI初學者
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-05-22 14:57:09 IP:220.133.xxx.xxx 訂閱
 請問各位大大, 大家有類似的經驗跟解決之道嗎?
感謝大家...

===================引 用 dky 文 章===================
各位好, 目前我使用ClientDataSet搭配scktsrvr.exe遇到一個粉頭痛的問題, 不小得各位先進有沒有相同的經驗及解決方法.

我遇到連續Connect及Disconnect多次後, 在斷線時會停留大概3分多鐘才會回應回來, 讓人感覺程式當掉了.
也就是執行到SocketConnection1.Connected := False;
就停住粉久才回來...
請問有誰知道會是啥問題嗎, 我換過這一版的CsScktSrvr也一樣的狀況.

感謝大家.

===================引 用 G01 文 章===================
歡迎大家反映使用TSocketConnection的狀況是否有改善,目前測試CsScktSerer已經非常穩定!!
除了在頻寬不足的網路狀況下反映遲緩之外,還算理想
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2011-07-10 14:56:22 IP:114.33.xxx.xxx 訂閱
 To dky:
已經找到問題點並且修正了,去下載新的版本吧。
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2011-09-18 14:12:01 IP:220.128.xxx.xxx 訂閱
請問您問題點是在哪, 新的版本放在哪邊
因我後來有再自己加了一些功能進去, 所以想直接修正掉問題點即可.
目前常遇到Connect或DisConnect都要好久才回應,讓使用者覺得好像當機了.
感謝您~~
===================引 用 G01 文 章===================
To dky:
已經找到問題點並且修正了,去下載新的版本吧。
dky
一般會員


發表:12
回覆:30
積分:13
註冊:2004-06-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2012-06-28 16:23:12 IP:114.32.xxx.xxx 訂閱
請問有消息嗎??

===================引 用 dky 文 章===================
請問您問題點是在哪, 新的版本放在哪邊
因我後來有再自己加了一些功能進去, 所以想直接修正掉問題點即可.
目前常遇到Connect或DisConnect都要好久才回應,讓使用者覺得好像當機了.
感謝您~~
===================引 用 G01 文 章===================
To dky:
已經找到問題點並且修正了,去下載新的版本吧。
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#16 引用回覆 回覆 發表時間:2012-06-28 17:06:36 IP:59.120.xxx.xxx 未訂閱
應該是以下:

delphi.ktop.com.tw/board.php
===================引 用 dky 文 章===================
請問有消息嗎??

===================引 用 dky 文 章===================
請問您問題點是在哪, 新的版本放在哪邊
因我後來有再自己加了一些功能進去, 所以想直接修正掉問題點即可.
目前常遇到Connect或DisConnect都要好久才回應,讓使用者覺得好像當機了.
感謝您~~
===================引 用 G01 文 章===================
To dky:
已經找到問題點並且修正了,去下載新的版本吧。
系統時間:2024-04-27 10:18:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!