同一客户端,只运行一个程序与应用服务器建立后,其它的程序就用这个联接,(100分)

  • 主题发起人 主题发起人 maming
  • 开始时间 开始时间
M

maming

Unregistered / Unconfirmed
GUEST, unregistred user!
我所说的是同一客户端,
只运行一个与应用服务器建立后,
其它的程序就用这个联接,
简单点说,
server1.exe在服务器上运行,
在同一客户端有connect1.exe:与服务器建立联接的程序,
还有client1.exe,client2.exe,client3.exe...等其它的程序,
就直接使用connect1.exe所建的联接,不用每个clientX.exe都去与server1.exe
建立联接。
 
简单SERVER端实例模式设为单实例模式即可
 
应用程序服务器server1.exe在服务器上运行,
在同一客户端有connect1.exe用了一个SCOKETCONNECT与SERVER1。EXE联接:
在connect1.exe中如有访问数据的行为肯定是通过这个SCOKETCONNECT,
现在我的这个客户端还有三个或更多的程序要访问SERVER1。EXE。
如;client1.exe,client2.exe,client3.exe...等其它的程序,
是不是这些程序中可以不用SCOKETCONNECT或DCOM等去与SERVER1。EXE联接,
就直接使用connect1.exe所建的联接呢?
 
有些急了,
各位请多多指教.
 
不知我是否看懂了你的问题?
一定要多个客户端共用一个连接吗?如果一定要实现的话请修改类工厂的代码,让
它返回同一个接口,或采用命名技术也可以实现。
公用同一个Server只有在极特殊的需求下才使用,因为当多个客户端同时并发访问
时,Server得执行效率会明显降低(默认单元线程将排队处理),即使Server采用
自由线程这样做也没有任何好处!
如果是为了节约资源,那么Server端的连接分配可以交给Delphi来管理(看一下
RegisterPooled函数),或者改由MTS来管理可能更好一些。
TO qiu_peking: 采用单实例并不表示公用了同一个连接!而是启动了多个服务器进程。
 
《一定要多个客户端共用一个连接吗?》
我有三个模块,client1.exe,client2.exe,client3.exe
要是在同一台客户端不共用一个连接的话,
那不是要在每个EXE中使用一个SOCKETCONNECT控件去联接服务器吗?
要是我同时运行这三个模块,就与应用服务器建立了三个联接,这样不好吧!
《如果一定要实现的话请修改类工厂的代码,
让它返回同一个接口,或采用命名技术也可以实现。》
修改类工厂,我想我不会做,
能详细说说命名技术吗?
或是告诉我那里有这方面的资料,先行谢谢!
《公用同一个Server只有在极特殊的需求下才使用,因为当多个客户端同时并发访问时,》
如果建立多个SERVER,而系统要在容错方面进行改进,
得保证至少有两台机器运行同一服务,
这样的话,数据库服务器的用户数不又是个问题吗?
不过,如果没有更好的办法,也只有增加数据库的用户数了,我所想的是不对的呢?
请多多指教。

 
NEW CLASSSH时
Instancing选single
Threading选Apartment
 
如果不用COM,也可以使用进程通信的机制共享连接(实际上是在你的
Connection.exe中提供一个接口供其他程序同它通信)。进程通信的
方式很多,如命名管道、共享内存、RPC等。在Windows下可能NamedPipe
最简单。
有时,你也要注意多线程的同步和互斥问题。
 
实际上是在你的Connection.exe中提供一个接口供其他程序同它通信)。进程通信的
方式很多,如命名管道、共享内存、RPC等。在Windows下可能NamedPipe最简单。
那有这方面的资料,能否讲详细点,或是提供个例题什么的,
本人惭愧,不知如何去做。
 
请大家多多指教!
 
修改类工厂的实现比较简单,说到命名技术看一下COM方面的资料就可以找到,只是比
较抽象。说到特殊应用的例子就是Table标识号自动分配的问题,如果用MTS的话则更
简单,使用共享属性的管理机制就可以(仅限于特定应用)。
另外,不论是使用Delphi5的Pooler技术还是使用MTS,实际上都可以解决你的问题,
在服务器端不一定就会启动或创建三个实例,理想的情况下只有一个实例,实际上就
是你所说的共享连接问题,但从代码的编写上无法保证,除非修改类工厂代码或采
用名字技术。
至于数据库的连接数问题,与你的问题无关或至少可以说没有很直接的关系,因为多
个对象或连接可以共享相同的数据库连接。分布式结构的目的之一就是能用较少的数据库连接服务于更多的用户,不知你能否理解上述的观点。
仍有问题的话请发往下列地址:Langger@sina.com.cn,我会给你例子代码。
 
对不起,更正一下是langger@sina.com
 
To langer:你的邮箱好象不对,我两次都没有发过去,
我现在对这个问题较急,烦请给E几个例子什么的好吗?
你所说的几个方法,我想是我所要的,可我不知如何做,
在这方面还只是个入门,请多多指教,先行谢过。
E_mail:maming_hn@cmmail.com
 
有一些以前编写的代码(在公司的机子里),周一上班后发给你。
 
to langer
给我一份,看看你我的想法是否相同。rax@regal-eastasia.com
 
client(n)---Com Connent Manager server---App Server--- DataBase
OK?
 
To langer:
谢谢你先,静待你的例程.
 
正在发送,请等待。。。
仅仅是一个完整的内部技术培训用的例子,其中有类工厂的修改方法。
 
后退
顶部