Dart动态类加载

时间:2014-04-15 18:58:25

标签: dart dart-isolates

我想用Dart构建一个应用服务器。 dart:io库中的httpServer肯定是一个很好的起点。但是,我正在努力完成任务,以便部署"没有重新启动服务器进程的应用程序。

更确切地说:我希望像Java中的servlet容器一样,像Tomcat,我可以轻松部署或重新部署应用程序,而无需重新启动容器。我以为我可以利用镜像系统,它允许我原则上从文件系统加载库及其包含的类。但不幸的是,我似乎无法重新加载库。当我向库中添加新类或更改现有类的编码时,如果不重新启动dart进程而对库进行新的反射,则不会反映更改。只有当我停止进程并再次重新启动时,才会看到更改。

那么:有没有办法擦洗镜像系统并让它在同一个Dart进程中再次加载库及其类?

2 个答案:

答案 0 :(得分:1)

我认为分离株非常适合这种要求。

我还没有自己使用它们,但据我所知,你可以动态加载和卸载它们。 文档还不是很广泛。 我发现了一些事情:

答案 1 :(得分:0)

所以,是的,Dart可以在运行时动态(重新)加载dart文件。每个新隔离都有自己的MirrorSystem。如果要重新加载dart文件,则必须创建一个新隔离,并使用此隔离的MirrorSystem迭代此MirrorSystem已知的库中的内容。如果您的dart文件是MirrorSystem已知的库的一部分,则此文件中包含的所有函数和类都将被加载并重新反映。

这种解决方案有一些缺点:首先,它是相当重量级的。隔离间通信的编程很麻烦。还要看,每次重新加载时内存消耗是否会增加。其次,解决方案并不是真正的动态:隔离只加载已知的#34;在设计时。它们必须直接或间接导入到包含静态函数的dart文件中,该函数在创建隔离时调用。

如何改善情况的两个想法: 1.如果Isown的spawn和spawnUri方法可以获得附加库的列表作为参数,这将包含在隔离的MirrorSystem中,这将有所帮助。 2. Java中的类加载器独立于进程和线程。他们只是加载类。为什么在Dart中这不可能?