client-->gateway 1-n -->business 1-n 是不是每个business启动时 主动找到所有的gateway 并建立一个tcp长连接。
而gateway接到请求数据后,会找一个空闲的business处理,而当business忙时,不在接受请求。
相当于gateway是异步非阻塞的, 儿business是同步的
business忙时 请求是在accept队列里排队么 还是在gateway里排队
gateway接到请求数据后,会找一个空闲的business处理
目前是随机一个business处理,具体参考手册路由部分
了解。那这个business如果有未处理的完的请求,GATEWAY又进行了新的请求过来,这时候如果重启worker进程,那这个新请求是不是就丢掉了?
对,有可能
gateway将请求转发给一个随机的空闲 businessWorker 来处理:
$this->router = array("\\GatewayWorker\\Gateway", 'routerBind'); $worker_connection = call_user_func($this->router, $this->_workerConnections, $connection, $cmd, $body); public static function routerBind($worker_connections, $client_connection, $cmd, $buffer) { if (!isset($client_connection->businessworker_address) || !isset($worker_connections)) { $client_connection->businessworker_address = array_rand($worker_connections); } return $worker_connections; }
gateway如果connect到bussiness时,完成三次握手后,进入了accept队列,但是这时候bussiness被平滑重启了,会不会丢掉这次请求数据啊
如果bussinessWorker正在处理请求,则这个请求不会丢,但是gateway在businessWorker在处理请求的过程中仍然给这个businessWorker转发新的请求,这些新的请求可能会丢
额 那等于平滑重启有一定风险,有没有办法在平滑重启前,让gateway不在转发新情求
目前没有办法
business忙时 请求是在accept队列里排队么 还是在gateway里排队
目前是随机一个business处理,具体参考手册路由部分
了解。那这个business如果有未处理的完的请求,GATEWAY又进行了新的请求过来,这时候如果重启worker进程,那这个新请求是不是就丢掉了?
对,有可能
gateway将请求转发给一个随机的空闲 businessWorker 来处理:
gateway如果connect到bussiness时,完成三次握手后,进入了accept队列,但是这时候bussiness被平滑重启了,会不会丢掉这次请求数据啊
如果bussinessWorker正在处理请求,则这个请求不会丢,但是gateway在businessWorker在处理请求的过程中仍然给这个businessWorker转发新的请求,这些新的请求可能会丢
额 那等于平滑重启有一定风险,有没有办法在平滑重启前,让gateway不在转发新情求
目前没有办法