Borland Socket Server在通过Internet联接时,很有问题,有没有替代品?(300分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
Borland Socket Server在通过Internet联接时,很有问题,有没有替代品?
我在作三层结构时,有一部分需要通过Internet来连接,是走的Borland Socket Server
(scktsrvr.exe)。
但这个程序很有问题,有的用户连接上之后,这个程序就会站用大量的CPU时间,
而这个用户在断了连接之后,在Borland Socket Server是还存在这个连接,
而且,还是占用大量的CPU时间(90%以上)。
这使的服务器根本无法作其它的操作。

现在已无法改成其它结构。
唯一可行的方法,只有另找一个Borland Socket Server的替代品,
要不就想办法修改它其中的代码。

相关代码片段如下。

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;
while not Terminated and FTransport.Connected do
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:
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
DispatchMessage(msg);
WAIT_TIMEOUT:
if (FTimeout > 0) and ((Now - FLastActivity) > FTimeout) then
FTransport.Connected := False;
end;
except
FTransport.Connected := False;
end;
finally
FInterpreter.Free;
FInterpreter := nil;
end;
finally
FTransport := nil;
end;
finally
CoUninitialize;
Synchronize(RemoveClient);
end;
end;
 
scktsrvr.exe 当中有一个选项, 可以设置当Client没有响应时自动断开的时间, 但是这样
也不能解决根本问题! 你可以先尝试修改当中的源码, 但是这个东西可能真的有些很难解决
的问题, 我曾经的问题没把我搞死!
先关注!
 

我们最早就用的这个选项,就是超时的设置,可还是没有用,
常常会死掉的。

:-(

源代码改起来太麻烦了。
你可有其它的解决办法吗?
 
1.webconnection
2.SOAP(结构很爽,我做了具体测试数据稍后出台)
 
to 房客:
现在已无法变理软件构架了,
只能用Socket了,只有找Borland Socket Server的替代品,
或想办法修改它其中的代码。
 
我看不懂的。
 
嘿嘿,我可不敢在你们专家面前乱说.你叫我来听课吗?[:D][:D]
 
to 程云:

你的邮箱多少?我给你发个好用的替代品。
Delphi自带的控件就是不方便。
 
to 秋之叶:
多谢了,
zzmcy@21cn.com
是用来替代scktsrvr.exe的吗?
 
已发,试试看。
 
to 秋之叶:
完了,本来Borland Socket Server只在Internet上传输时
的特殊的条件下出现问题。
你给的这个,在本机上,每一次传输过程中都会……
:-(

看来还是不行,而且找不出问题到底在哪里,
嗨!对象的封装也有缺点,就是不知它把错误封装到哪疙瘩去了。
 
在INTERNET上还是用WEBCONNECTION好些,用它不用改结构,只要把SOCKETCONNECTION
换成WEBCONNECTION,然后用HTTPSRVR代替SCKTSRVR即可。
 
to 猛禽:
我现在只想找个好点的Borland Socket Server的替代品,
因为,客户端太多了,一一更找,工作量太大了。
而且,时间根本不准许。
 
还是抓时间来改用WEBCONNECTION吧!
 
可为何WEBCONNECTION的URL只能设置成http://server.company.com/scripts/httpsrvr.dll

而这个地址又根本联不通?
 
明白了,知道怎么设它了。
看来也只能这样作了,不过,我还是希望能找到Borland Socket Server的替代品。
 
to vine:
我看最好还是不要作这种修改,因为,我们不知道WEBCONNECTION是否会有其它的缺陷。
使用Borland Socket Server时,就因为对它在Internet上的使用缺少足够的测试
所以才会有现在这种问题。
我们不能够在现有的时间内对WEBCONNECTION作出足够的测试,
所以,不能换成WEBCONNECTION,因为,这样仓促的更换,只能使这个项目半路夭折。
根本不可取。
除非有足够的证据证明,WEBCONNECTION的引入不会带来任何新的缺陷。
 
我建議你換,好象WEBCONNECTION是在IIS環境下運行的吧,連接的管理由IIS進行,
我想IIS5的可靠性應該比ServerSocket來得好.
而改動則比較少,了只要換掉連接就行了.其他的都不需要改.
 
我只能关注~
 
scktsrvr.exe
很好的,我们的三层结构一直用的,很好
 
后退
顶部