bilive / bilive_client

基于Node.JS的bilibili账号活跃系统
MIT License
457 stars 109 forks source link

Q&A:请问插件这里怎么做到的呢? #119

Closed yjqiang closed 5 years ago

yjqiang commented 5 years ago

js刚开始看,mmp没怎么会。想问一下大佬的实现方法以及python可否用类似方法做到呢?目前我的函数分布在各个位置,底层包裹在web层上,然后对应解析,感觉python不好实现插件化

lzghzr commented 5 years ago

没有很高深, 因为之前用户实例都保存在一个map里, 现在插件的实现只是在特定时间(程序开启/更新用户/每分钟/有抽奖)把这个map传过去 理想状态用户实例对于插件应该是只读的, 不过限于javascript做到这点很困难, 这样插件的侵入性就很低, 便于热加载(目前未实现) 设置文件采用白名单, 插件在这个白名单里注册的键名最终会保存, 所以插件被移除的时候, 之前注册过的自然就会被丢弃

因为完全不懂python, 所以并不清楚是否能做到

yjqiang commented 5 years ago

没有很高深, 因为之前用户实例都保存在一个map里, 现在插件的实现只是在特定时间(程序开启/更新用户/每分钟/有抽奖)把这个map传过去 理想状态用户实例对于插件应该是只读的, 不过限于javascript做到这点很困难, 这样插件的侵入性就很低, 便于热加载(目前未实现) 设置文件采用白名单, 插件在这个白名单里注册的键名最终会保存, 所以插件被移除的时候, 之前注册过的自然就会被丢弃

因为完全不懂python, 所以并不清楚是否能做到

可是web层和具体的解析json应该不能放在一起的吧。这是两层的东西。所以插件加入的时候还是必须跨类去加入操作吧。python这里需要去折腾网络断开、403等问题,所以底层网络是单独一层的

yjqiang commented 5 years ago

可能 一个插件的添加是包含一些子插件吧 想了一下 python这里应该可以把每一步骤的对应类继承 然后各个函数还是老逻辑下去 调用的时候统一init或者类似的操作 不知道这样是否和您实现的一致呢……

lzghzr commented 5 years ago

嗯, 没太理解你顾虑的事情. 是指B站弹幕服务器发过来的JSON吗? 这个插件是拿不到数据的

yjqiang commented 5 years ago

嗯, 没太理解你顾虑的事情. 是指B站弹幕服务器发过来的JSON吗? 这个插件是拿不到数据的

就是在想,插件化的各个插件执行逻辑可能有差别。比如弹幕是监听-》抽奖-》统计(可能有延迟抽奖),日常是定时-》执行 loop,这样是否比较难以统一呢?

Vector000 commented 5 years ago

又见一个大佬 趴 现在这个对json的解析是在插件外实现的,传入插件的是一个defaultOptions对象 各个插件执行逻辑的区别,可以先将一些方法模块化,比如start,load之类的方法,具体有较大差别的执行逻辑可以另外做成一个模块。

yjqiang commented 5 years ago

又见一个大佬 趴 现在这个对json的解析是在插件外实现的,传入插件的是一个defaultOptions对象 各个插件执行逻辑的区别,可以先将一些方法模块化,比如start,load之类的方法,具体有较大差别的执行逻辑可以另外做成一个模块。

好吧 我觉得python应该也可以……虽然其实已经差不多这样了 有时间详细看看 试试能不能类似这样 虽然之前已经整合过了 但是还是不太满意 试试看能不能做到类似的东西

yjqiang commented 5 years ago

不过我记起来了 有个死坑是403问题 需要统一把requests弄在一起分配调度 这样会不会比较难插件化呢

Vector000 commented 5 years ago

不过我记起来了 有个死坑是403问题 需要统一把requests弄在一起分配调度 这样会不会比较难插件化呢

高并发403吗,其实这个项目好像目前没有很好的解决,之前通过CDN规避403的方法也已经失效了 有一个idea就是在XHR方法里面加一个时间判定进行分配调度,但是这个根本就还没有插件化嘛(

yjqiang commented 5 years ago

不过我记起来了 有个死坑是403问题 需要统一把requests弄在一起分配调度 这样会不会比较难插件化呢

高并发403吗,其实这个项目好像目前没有很好的解决,之前通过CDN规避403的方法也已经失效了 有一个idea就是在XHR方法里面加一个时间判定进行分配调度,但是这个根本就还没有插件化嘛(

我试过把时间random,就是比如小电视抽奖多用户同时参与的时候,提前分配上random休眠时间,尽量错开

yjqiang commented 5 years ago

还有就是考虑网络层再加个统一的底层的东西 类似于全局queue这种 限制并发

lzghzr commented 5 years ago

不过我记起来了 有个死坑是403问题 需要统一把requests弄在一起分配调度 这样会不会比较难插件化呢

这个项目对插件提供了一个全局的 XHR , 用来发送HTTP请求, 所以要加上队列或者代理的话, 并不难

yjqiang commented 5 years ago

不过我记起来了 有个死坑是403问题 需要统一把requests弄在一起分配调度 这样会不会比较难插件化呢

这个项目对插件提供了一个全局的 XHR , 用来发送HTTP请求, 所以要加上队列或者代理的话, 并不难

但是队列还要考虑有效时间 优先级之类的吧 这可是相当大的坑呀 ps我们方法考虑的应该一致的 我上面写了一下我的想法

lzghzr commented 5 years ago

但是队列还要考虑有效时间 优先级之类的吧 这可是相当大的坑呀 ps我们方法考虑的应该一致的 我上面写了一下我的想法

超时直接抛错就好了, 挂机而已, 又不需要太认真, 如果是聊天系统的话这么干可能要被打死

yjqiang commented 5 years ago

但是队列还要考虑有效时间 优先级之类的吧 这可是相当大的坑呀 ps我们方法考虑的应该一致的 我上面写了一下我的想法

超时直接抛错就好了, 挂机而已, 又不需要太认真, 如果是聊天系统的话这么干可能要被打死

我暂时是只有预先sleep,队列统一安排的方法总觉得还是有坑…… anyway 先看看老坑吧 新坑少开

yjqiang commented 5 years ago

非常感谢 基本都搞定了