关于gateway worker原理问题

0

client-->gateway 1-n -->business 1-n
是不是每个business启动时 主动找到所有的gateway 并建立一个tcp长连接。


而gateway接到请求数据后,会找一个空闲的business处理,而当business忙时,不在接受请求。


相当于gateway是异步非阻塞的, 儿business是同步的

已邀请:

ayamzh

赞同来自:

business忙时 请求是在accept队列里排队么 还是在gateway里排队

walkor

赞同来自:


gateway接到请求数据后,会找一个空闲的business处理



目前是随机一个business处理,具体参考手册路由部分

blogdaren - 常年游走于 Linux、PHP、C、VIM 之间【http://www.phpcreeper.com】

赞同来自:

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;
}

ayamzh

赞同来自:

gateway如果connect到bussiness时,完成三次握手后,进入了accept队列,但是这时候bussiness被平滑重启了,会不会丢掉这次请求数据啊

walkor

赞同来自:

如果bussinessWorker正在处理请求,则这个请求不会丢,但是gateway在businessWorker在处理请求的过程中仍然给这个businessWorker转发新的请求,这些新的请求可能会丢

要回复问题请先登录注册