三层中关于Delphi自带的SocketServer的连接问题(D6版本)(300分)

  • 主题发起人 主题发起人 blue_morning
  • 开始时间 开始时间
B

blue_morning

Unregistered / Unconfirmed
GUEST, unregistred user!
一、客户端使用SocketConnection来连接应用服务器(应用服务器使用Delphi中自带的Socket Server),代码如下:
if not SocketConnection.connected then
SocketConnection.Open
try
SocketConnection.AppServer.****
finally
SocketConnection.Close;
end;

也就是每次调用完服务后,我都关闭了和应用服务器的连接。在下次需要调用服务时再打开与应用服务器的连接。
这样的操作在100M的局域网中,SocketConnection.Open需要的时间在0.1秒以下。如果系统运行在Internet环境下,SocketConnection.Open需要花费5-8秒的时间,这样的时间是我自己和用户都无法接受的。请问大家有什么办法?
二、在局域网中,长时间的使用后,当客户端使用SocketConnection连接应用服务器端Delphi中自带的Socket Server时会明显的有接连延迟。时间有时会长达20秒以上。请教原因。
 
SocketConnection.Open 会建立TCP连接,并且建立远程com对象,然后
返回接口给client端使用.
如果频繁的Open,Close,会不断的造成远程对象的建立/销毁.
另外可以使用Com+,它有系统自带的缓冲池功能,能提高性能.
 
1、不需要如此频繁的 Open ,Close 操作,比较节省时间的办法是在第一次使用
TSocketConnection 对象后,不用 Close ,当下次使用的时候先判断一下对象
是否仍然处于 Connected 状态,如果连接正常,直接 使用 Appserver 的函数
如此频繁的创建、销毁,对 APP服务器并不是一个好事情,如果客户端并发请求很多
势必会引起服务器的内存匮乏。
2、在服务端程序的 CoClass 的 COM+ 属性页,打开 Object Pooling ,然后在Windows的
组件服务 COM+ 程序管理树中,对你的这个服务组建 的 激活 启用对象池。
 
先谢谢两位的回答,第一个问题基本清楚了。但为什么HTTP的协议连接速度会很快呢?它也是连接成功后就断开了啊?
第二个问题。可否再说的详细点,我无法进入到配置的界面。
 
运行DcomCnfg,组件服务,com+应用程序
 
不要频繁open/close..最后一次open直到终止程序再close
 
第一个问题还有一个隐含的关键:为什么通过Internet创建的远程对象需要这么长的时间?
第二个问题:我在Com+的分支中,找不到Borland socket server这个项目
 
ding yi xia
 
频繁建立连接池。。。太影响资源了
 
后退
顶部