Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

多插件多进程多PPS

Open jxllh123456 opened this issue 3 years ago • 11 comments

这都2022年了,shadow官方还是没有对“多插件多进程多PPS”的情况做支持吗?

jxllh123456 avatar Dec 23 '21 03:12 jxllh123456

这是一个以分享交流为目的的开源项目。任何一个特性能够实现只有一个原因:任何人有该特性的需求,实现并分享出来了。

所以“多插件多进程多PPS”这种特性没有“官方”支持,肯定是因为“官方”没有这种需求。

处于技术交流的目的,我们愿意支持你实现这个特性。支持的方式就是通过代码交流一些关键技术的实现。如果最终的实现与现有代码冲突不大,就可以合入进来。如果冲突比较大,也可以保留在你的fork中。

shifujun avatar Dec 23 '21 06:12 shifujun

“多插件多进程多PPS”从字面意思来猜测,应该本身就是支持的,只是没什么特别封装的接口而已。从原理上讲,每个进程都是独立的,所以多进程不用特别支持。多PPS不知道是想干什么,但是可以猜测同一个进程里有多种Loader的特殊实现。这个可以通过修改包名来解决。也就是重复接入多个不相关的Shadow实现。多插件也一直是支持的,已经在sample-app和sample-base中演示了。

shifujun avatar Dec 23 '21 06:12 shifujun

感谢回复,我的意思就是每一个插件跑在一个单独的进程中,这种使用场景(个人理解这种场景需要新建一个PPS子类并注册与host manifest),shadow官方sample的两个插件是跑在同一个插件进程中的。

jxllh123456 avatar Dec 23 '21 06:12 jxllh123456

https://github.com/Tencent/Shadow/commit/a0ea9d59443f538631e445a96dc9d51babbe9497 加了第二个PPS,可以看看,帮助完善一下。

shifujun avatar Dec 23 '21 06:12 shifujun

经过测试发现目前master分支上的sample并不能跑起来2个插件进程(:plugin和plugin2)同一时间只能跑起来一个,做不到两个插件分别同时跑到两个进程中。。。

jxllh123456 avatar Dec 23 '21 10:12 jxllh123456

SamplePluginManager.java 的125到128行是不是有问题?

jxllh123456 avatar Dec 23 '21 10:12 jxllh123456

你可以继续写你需要的场景,比如用两个manager实例分别绑定对应的PPS,或者用一个manager实例绑定两个PPS。怎么实现完全看你的需求是什么。现有示例代码不是做不到,而是因为不需要而没有做。

SamplePluginManager.java 的125到128行是不是有问题?

没有问题。如果你觉得有问题要说清楚问题呀。不过最好还是通过代码表达,把有问题的代码push上来,说明预期和不符合预期的地方。

shifujun avatar Dec 23 '21 11:12 shifujun

你好 @shifujun ,我想要的功能实现了,其实就改了一行代码 private void loadPluginLoaderAndRuntime(String uuid, String partKey) throws RemoteException, TimeoutException, FailedException { // if (mPpsController == null) { bindPluginProcessService(getPluginProcessServiceName(partKey)); waitServiceConnected(10, TimeUnit.SECONDS); // } loadRunTime(uuid); loadPluginLoader(uuid); } 在manager的FastPluginManager.java 中把ppsContoller的非空判断去掉,这样就可以通过多个pps去加载运行插件了。

jxllh123456 avatar Dec 24 '21 02:12 jxllh123456

你看你这样简单实现就满足了你自己的需求。但是对于其他人来说mPpsController依然只持有了一个PPS,后一个覆盖前一个的值之后,就失去了对前一个PPS的控制。

shifujun avatar Dec 24 '21 02:12 shifujun

@jxllh123456 多插件多进程,你的loader和runtime是多份吗

chenlin139 avatar Jul 12 '22 07:07 chenlin139

我看代码里宿主的ppscontroler是为空才会赋值,那在有多进程的插件场景下不就有问题了么😅,原来是设计里没有这种场景

AizhReposity avatar Jul 13 '22 16:07 AizhReposity