三层深层次问题探讨!!!!!!!

tanminr 2003-01-08 03:22:50
最近开发了一个三层架构的进销存系统,采用(DELPHI6+Socket+ADO+MSSQL_Server2000),在系统运行过程中,
有以下问题:
1。中间层 连接到服务器(MSSQL_Server2000)的连接数较多。每登陆一个用户,就产生一个数据库连接!
2。SOCKET连接的时间较长后,会产生一个关于Socket的错误!然后客户端无法连接的服务器!(虽然已经采用了容错平衡,可以解决再次连接服务器)
3。当客户端将数据上传时,由于数据量较大的原因,导致客户端无法继续工作,直到上传完成为止。
以上问题,捆扰了我很久,一直在寻求一个好的解决方法。比如说,上传数据可以采用多线程,但是本人试验了
很长时间一直没有成功。请问各位有没有以上问题的解决方法?有没有作过客户端多线程与服务端通信的?
希望各位多交流交流.(mail to:tanminr@963.net)
...全文
6 点赞 收藏 25
写回复
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
fansnaf 2003-04-17
gz
回复
mego 2003-04-17
study
回复
ActiveBeginner 2003-04-17
gz study
回复
WangPeter 2003-03-26
说实话,照我目前的水平我只能使用Delphi提供的TMtsDataModule和TMtsAutoObject两个类再结合Midas实现三层架构,还不敢自己写Socket来传递数据,因为我认为自己做的话恐怕很难达到Borland那样的效率和稳定性。
回复
tonyyang 2003-03-26
奉劝大家不要过分的依赖什么COM+、Midas、Corba。他们只是给提供了一个手段!
更重要的工作要自己去设计客户端、服务器,象楼主所说的问题也就是说你为每个
客户端启动了一个服务例程,而且你的C-S不是无状态的,连接一直保持着!你要
是的自己的客户端和服务器设计成为无状态的,否则似乎,没有发挥出三层的好处,
倒是增加了变成和使用的复杂度。
至于大数据量上传,可以使用多线程,后台传输!但是要尽量不要将大的数据量传来
传去,减少网络负担!修改数据时控制只传修改过的,在下在数据时分段下载,段不
要划分的太大!
回复
catthunder 2003-03-26
你们说的事务控制是指哪点?
如果是几段SQL语句更新的话,是很简单的。
TDataBase.StartTransaction,
TDataBase.Commit,
TDataBase.Rollback.
回复
chenquan 2003-03-26
关注问题
回复
mmc0531 2003-03-24
哪位高手能给我一个多线程的中间层的例子呀???
0531mmc@163.com
先谢过了
回复
tanminr 2003-03-17
看了各位兄台的讨论,也考虑了很久,我觉得用CORBA连接技术来做应该可以避免Socket的问题,也应该可以避免COM带来的不容易连接的问题。
不过我做的CORBA系统的客户端还是单线程的,有点不爽!小弟我很想请教一个能够在客户端写多线程系统(三层系统)的高手。
回复
NightCloud 2003-02-11
study
回复
dyf2001 2003-02-11
up
回复
xh_hero 2003-02-11
学习 学习 再学习!!
回复
eastliangliang 2003-02-11
文兄:你的事务控制问题怎么解决的?别卖关子啦,快说啊。
小小的程序是COM中Iunknown接口的实现,在Delphi里好像不用自己写吧。
回复
ytwxw 2003-02-11
笑天
事务控制的问题你解决的怎么样了?


小小
你的这行代码是用在哪的?客户端?服务器端?

能不能给个完整的例子啊?

我的E_Mail zz_shxx@163.com 谢谢先
回复
ihihonline 2003-01-10
1:Connect PoolIng;
2:
/* 引用对象*/
ULONG IUnKnown::AddRef(void)
{
m_RefCount++; /*引用计数加一*/
return m_RefCount; /* 返回当前的被引用次数的总数 */
}

/*释放对象的*/
ULONG Iunknow::Release(void)
{
m_RefCount--; /* 引用次数减一 */
if (m_RefCount==0) /* 如果计数值为0,对象释放自己 */
{
delete this;
return 0;
}
return m_RefCount; /* 返回当前的被引用次数的总数 */}

/*查询接口*/
HRESULT IunKnow::QueryInterface(REFIID riid, LPVOID FAR *ppv)
{
if(riid==IID_IUnknown || riid==IID_IDropTarget) /*检查是否对象支持所查询的接口*/
{
ppv=(LPVOID) this; /* 把被请求接口的指针赋给输出参数 */
AddRef(); /* 引用对象 */
Return S_OK; file://成功的标记
}
else{
*ppv=NULL; /* 把输出参数的指针赋为空 */
return E_NOINTERFACE; /* 返回失败的信息 */
}
}

回复
voodoo169 2003-01-10
高手 学习 学习 再学习!!
回复
lizongqi 2003-01-10
回复
jackystar 2003-01-09
ado好像有内存泄漏,每次2k 真的吗?
回复
eastliangliang 2003-01-09
ado好像有内存泄漏,每次2k,怎么解决呢?
回复
kenmaj 2003-01-09
看看李维的书吧,他详细分析了应用服务的线程模型,应该可以解决多客户同时访问的效率问题!
关于资源的释放问题,我们写了个程序,每天晚上1点重启应用服务,以前一个月下来,应用服务要占到32M内存,后来重启就好多了!
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1566

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告