Listener有三种处理客户端请求的方式:
1. Dedicated Connection
当客户端发出请求后,listener直接建立一个新的进程处理客户端请求,
当连接建立后,Listener会放弃对客户端与该进程通讯的控制权。
所以该连接也称为dedicated 或者bequeath连接。注意该新建的进程
是在客户端请求时候Listener建立的。
2.Prespawned Connection
Prespawned connection是Dedicated connection的特例。如果你希望客户端
能与服务器快速建立连接,而又是Dedicated connection的话,
可以采用该方式。因为当客户端发送连接请求到服务器的时候,不需要等待Listener
去建立一个进程来服务该客户端,因为这些进程已经预先Spawn了(Listener在启动时候
就已经根据配置参数Spawn相应数量的进程,放在一个Prespawned processes Pool里面,
此参数PRESPAWN_MAX在listener.ora文件里面配置)。所以称之为Prespawned.
注意:PRESPAWN_MAX这个参数是指总的prespawned processes,你可以指定每种
协议prespawn的process(即pool_size参数),当然,总数不能超出PRESPAWN_MAX的值。
3.Multithreaded Connection
这种连接方式也有相应的服务客户端的进程,称之为Dispatcher,
它和Prespawned process有点相似,也是预先Spawn的。不过跟Prespawned process
有两点区别:
a)dispatcher是在instance启动时候就spawn的,而prespawned process
是在listener启动时候spawn的。
b)dispatcher是共享的,也就是说,它不只是为一个客户端服务,当它接受了
客户端连接后,会把客户请求放在request queue里面,让另外一个进程
shared server process进行处理;跟着它就会服务另外一个客户端的请求。
c)dispatcher在完成与客户端的成功连接后,需要向Listener注册该连接(Prespawned
process没这个步骤)。需要这个步骤是因为可以让listener知道当前每个dispatcher的
负载情况,使dispatcher不会超出它能handle的最大连接数 (通过配置init.ora文件
里面的mts_dispatchers参数的子参数CON和SESS就可以决定dispatcher能handle的最大
连接数。不过别混淆CON和SESS子参数的意义,因为如果你需要实现connection
pooling的话,就要靠这两个参数);另一方面,可以实现我们常说的load-balancing(负载平衡)。
1. Dedicated Connection
当客户端发出请求后,listener直接建立一个新的进程处理客户端请求,
当连接建立后,Listener会放弃对客户端与该进程通讯的控制权。
所以该连接也称为dedicated 或者bequeath连接。注意该新建的进程
是在客户端请求时候Listener建立的。
2.Prespawned Connection
Prespawned connection是Dedicated connection的特例。如果你希望客户端
能与服务器快速建立连接,而又是Dedicated connection的话,
可以采用该方式。因为当客户端发送连接请求到服务器的时候,不需要等待Listener
去建立一个进程来服务该客户端,因为这些进程已经预先Spawn了(Listener在启动时候
就已经根据配置参数Spawn相应数量的进程,放在一个Prespawned processes Pool里面,
此参数PRESPAWN_MAX在listener.ora文件里面配置)。所以称之为Prespawned.
注意:PRESPAWN_MAX这个参数是指总的prespawned processes,你可以指定每种
协议prespawn的process(即pool_size参数),当然,总数不能超出PRESPAWN_MAX的值。
3.Multithreaded Connection
这种连接方式也有相应的服务客户端的进程,称之为Dispatcher,
它和Prespawned process有点相似,也是预先Spawn的。不过跟Prespawned process
有两点区别:
a)dispatcher是在instance启动时候就spawn的,而prespawned process
是在listener启动时候spawn的。
b)dispatcher是共享的,也就是说,它不只是为一个客户端服务,当它接受了
客户端连接后,会把客户请求放在request queue里面,让另外一个进程
shared server process进行处理;跟着它就会服务另外一个客户端的请求。
c)dispatcher在完成与客户端的成功连接后,需要向Listener注册该连接(Prespawned
process没这个步骤)。需要这个步骤是因为可以让listener知道当前每个dispatcher的
负载情况,使dispatcher不会超出它能handle的最大连接数 (通过配置init.ora文件
里面的mts_dispatchers参数的子参数CON和SESS就可以决定dispatcher能handle的最大
连接数。不过别混淆CON和SESS子参数的意义,因为如果你需要实现connection
pooling的话,就要靠这两个参数);另一方面,可以实现我们常说的load-balancing(负载平衡)。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28538954/viewspace-755669/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28538954/viewspace-755669/