openstack icon indicating copy to clipboard operation
openstack copied to clipboard

请问chap11的RPC2的作用是?

Open YanAnzouyijun opened this issue 8 years ago • 5 comments

你好,读了你的著作对openstack有了更进一步的了解,提个建议吧,你可以对一些书上没说的代码,在代码目录里加个readme,这样有助于读者理解。。。。

YanAnzouyijun avatar Aug 23 '16 08:08 YanAnzouyijun

@YanAnzouyijun RPC2应该是RPC的一个简单一些代码实验。当时觉得如果RPC看懂了,看这个小例子应该不会是障碍,所以就留在这了。

JiYou avatar Aug 29 '16 11:08 JiYou

@JiYou 非常感谢作者大大,竟然回我了哎~~~~没有白买书~还有作者大大啥时候出一本关于agent的书啊,讲讲l3agent 和openstack调优之类~~~ 另外,我对于书里的第11章中的wsgi_instance这个例子,我有2点不能理解; 1. def factory(cls, global_config, **local_config): print " Auth:",local_config print " Auth:",global_config def _factory(app): return cls(app) return _factory 这个app参数是怎么传进去的啊?我看global_config,local_config都没有app参数。 2.加载api-paste.ini的时候不是应该先过滤后执行app的代码吗?为什么我打印出来的效果是先执行app的工厂方法,后执行过滤器的工厂方法,我这一点不是很理解;

YanAnzouyijun avatar Nov 17 '16 06:11 YanAnzouyijun

@YanAnzouyijun 最近手头事情比较多。这里只是简单回复一下思路。不一定正确,你可以去尝试验证一下。

factory方法的执行顺序

_factory方法只是说构建好一个类的instance。并不是说立马让这个类的instance开始工作。 如果要让这个类的instance开始工作,应该是需要查看__call__方法的。

所以,构建的顺序,与类开始工作的顺序不一定是完全一致的。

参数的传递

class Auth(object):

    def __init__(self, app):
        self.app = app

    @classmethod
    def factory(cls, global_config, **local_config):
        def _factory(app):
            return cls(app)
        return _factory

这里是一个类,其构造函数里面是需要有一个app参数的。而接下来的def factory方法,返回的是一个方法_factory(类似于C语言的函数指针)。这个函数方法的参数就是一个app。

有没有发现:

  • 构造函数需要的参数是app
  • 工厂方法返回的函数指针,需要的参数也是app。

这是因为,工厂方法嘛,要制造一个类的instance出来,肯定是需要一个参数的。那么这个参数怎么来的?

这个就是需要看PasteDeploy这个包的实现。我猜测是这样实现的。以api-paste.ini为例:

[pipeline:main]
pipeline = auth instance
[filter:auth]
paste.filter_factory = middleware:Auth.factory
[app:instance]
paste.app_factory = routers:app_factory

这里会先构建尾巴最后一个app的instance。然后把这个instance做为一个参数,传给auth的构建函数做为参数,然后把auth类的instance给制造出来。你可以自己验证一下。

JiYou avatar Nov 18 '16 01:11 JiYou

@YanAnzouyijun 小建议,github是支持代码格式的。你只需要看看markdown的语法就可以了。(不复杂,5分钟包会)

JiYou avatar Nov 18 '16 01:11 JiYou

@JiYou 非常感谢~~~~~~ 第一个问题昨天我验证过了,代码的流程确实如你所说,你提供的思路,也让我明白了很多,真的非常感谢 第二个github支持代码格式,我立马去学下,非常感谢~~~

YanAnzouyijun avatar Nov 18 '16 01:11 YanAnzouyijun