火山软件开发平台

标题: 【解决方案】火山视窗服务器插件化开发研究_部件DLL案例 [打印本页]

作者: 创世魂    时间: 2023-2-13 14:51
标题: 【解决方案】火山视窗服务器插件化开发研究_部件DLL案例
本帖最后由 创世魂 于 2023-2-13 21:21 编辑


火山视窗服务器插件化开发研究。


现在火山并没有出服务器插件,比如火山java,火山php,火山nodejs 等服务器开发。
比如:php虽然已经快丢进垃圾桶了,但是有个很好的优点,服务器更新基本上直接丢进去php文件覆盖就可以了。可以非常方便实现动态更新。
(夸张一下请勿较真,毕竟php依然坚挺)震惊php排名第十


火山没有这些服务器开发,只能依靠windows开发服务器,这就面临一个问题,如何动态更新。


毕竟exe程序想要更新必须关闭软件才能实现,关闭软件也就意味着服务器关闭。

不过还好有另外一条路,那就是通过dll热加载实现,业务逻辑放进dll。需要修改的时候就修改dll文件即可。

但是这又面临一个问题,如果只想某个业务模块停止,如何做?


其实也很简单,这就需要在软件服务器开发初期,对服务器所需要的功能模块拆分。
比如:注册dll、登陆dll、等等……如果注册dll需要维护就单独停止注册dll业务。


于是乎就有了下面的案例。
本案例客户端和服务器是基于HP_pack通讯协议实现,实现了服务器注册登陆业务分离,当某个模块需要维护的时候停止此模块即可。
因为案例写的比较简单,仅供演示参考,请勿用于生产环境。




(, 下载次数: 37)




下载例子后,注意将“登陆DLL”和“注册DLL”两个项目右键,进行编译发布版,然后运行主服务器才能使用。


(, 下载次数: 29)




服务器插件化开发后:
      优点:可以对模块进行动态更新,方便服务器维护升级。
      缺点:
            1、开发周期较长,对服务器程序逻辑思维有较高的要求。
            2、需要提前规划好各个模块业务。
            3、最大的缺点是,如果需要新增插件,需要停止整个服务器。因为插件逻辑是在“主服务器”源码中实现,新增插件必须对主服务器进行修改重新编译。
         
最后:至于能不能实现真正的热更新,新增插件也热更新?因为服务器插件是基于部件DLL实现,并不是自己通过类库动态载入的,所以就目前这个源码来说不能实现。

至于通过部件DLL能不能实现动态插件,比如放一个dll到目录中刷新插件列表,就可以直接加载新插件功能。。
目前好像部件不太好实现,如果有大佬有部件DLL的相关解决方案,欢迎贡献案例。
















作者: storey    时间: 2023-2-13 15:08
来学习下。。。。
作者: fengyishen    时间: 2023-2-13 15:25
感谢分享,下载学习。
作者: 1503123    时间: 2023-2-13 15:37
谁说的PHP丢垃圾桶了,
作者: 龙纹    时间: 2023-2-13 16:03
据我所知第3个缺点可以通过 boost.dll 这类的技术手段避免
作者: 东子    时间: 2023-2-13 19:39
哈哈,什么叫PHP“快丢进垃圾桶”,那请问火山和易语言了?
作者: 1503123    时间: 2023-2-13 20:26
本帖最后由 1503123 于 2023-2-13 20:28 编辑

支持火山PHP
作者: 创世魂    时间: 2023-2-13 21:20
1503123 发表于 2023-2-13 15:37
谁说的PHP丢垃圾桶了,

哈哈哈,只是夸张一下。因为网上很多培训班啥的,基本都是教java啥的。。动不动就是java各种技术栈。

实际上php市场还是非常大。
作者: 创世魂    时间: 2023-2-13 21:23
东子 发表于 2023-2-13 19:39
哈哈,什么叫PHP“快丢进垃圾桶”,那请问火山和易语言了?

夸张一下,毕竟php底蕴生态和排名还是嘎嘎深的
作者: 创世魂    时间: 2023-2-13 21:23
龙纹 发表于 2023-2-13 16:03
据我所知第3个缺点可以通过 boost.dll 这类的技术手段避免

要火山里面能用的方案……不知道有没有大佬贡献一下解决方案,我暂时反正没想到。
作者: alanwoo    时间: 2023-2-13 23:01
学习学习
作者: 米粒    时间: 2023-2-14 11:46
好思路!
作者: glbosom    时间: 2023-2-14 11:56
我的三层架构也是这个思想
作者: 创世魂    时间: 2023-2-14 13:29
glbosom 发表于 2023-2-14 11:56
我的三层架构也是这个思想

但是不知道如何才能动态的新增插件。。
不知道大佬有什么方案。。
作者: glbosom    时间: 2023-2-14 13:40
创世魂 发表于 2023-2-14 13:29
但是不知道如何才能动态的新增插件。。
不知道大佬有什么方案。。

我用的不是部件,我用的是动态链接库 通过API动态加载和卸载来更新插件 (, 下载次数: 13)


作者: CPUCN    时间: 2023-2-14 15:19
本帖最后由 CPUCN 于 2023-2-14 15:22 编辑

用部件进行插件开发倒是可以但是想实现热更新,感觉不太可能.


作者: CPUCN    时间: 2023-2-14 15:27
我倒是觉得,推出一个部件开发的标杆例子倒是很好的
至于热更新没有太大的必要
毕竟这样的需求太少.

多人异地协同 部件开发 文件同步 编译运行.
整个过程完全无感知,这倒是很有意义的.
一群小伙伴就可以一起愉快的敲代码了.

作者: 392012997    时间: 2023-2-14 20:38
感觉有点像基于E2EE的大小鱼的那个软件,强烈支持!!
作者: 350246356    时间: 2023-2-14 23:03
感谢分享,火山有你更强大~
作者: icq    时间: 2023-2-14 23:37
学习        
作者: wtuauwfn    时间: 2023-2-15 09:25
学习一下,以后可以插件化开发了
作者: htpmcj    时间: 2023-2-15 09:31
学习一下
作者: qaz2428119    时间: 2023-2-15 09:57
其实也不算很难,只需留出一定的协议口,把插件与服务器之间的通信搞好,就可以实现真正的热插拔
麻烦的就是如何快速的定位协议码,使用数组到是可以快速查找协议DLL,可也是需要客户端配套更新相同协议码
其实还是牵扯很多其它问题,
最主要的还是交互问题,还有就是相同协议码,不同版本导致的崩溃,错乱

作者: heiye    时间: 2023-2-15 12:32
来看看,期待大佬
作者: hhdmyhj    时间: 2023-2-15 13:05
感谢分享,下载学习。
作者: 麒灵    时间: 2023-2-15 13:20
学习一下
作者: amwji    时间: 2023-2-16 10:17
部件DLL 不能实现实时预览
作者: mylove    时间: 2023-2-16 12:14
来学习下。。。。
作者: nurjay    时间: 2023-2-16 12:26
功能不知道多稳定,看看
作者: 乐易论坛    时间: 2023-2-16 12:41
:噜阿噜支持了 感谢分享
作者: fengshangren    时间: 2023-2-16 13:04
学习一下,一般我是用不着热更新的
作者: 199    时间: 2023-2-16 13:06
把同一个DLL文件做成1.dll和2.dll,主程序自动在01-30秒加载1,31-60秒加载2
作者: q624410876    时间: 2023-2-16 13:54
:噜阿噜:噜阿噜:噜阿噜:噜阿噜
作者: Coco    时间: 2023-2-17 09:23
66666666
作者: 华运天成    时间: 2023-2-17 09:31
66666666666
作者: lvzhi_123    时间: 2023-2-17 13:04
感谢分享,下载学习。
作者: 345355377    时间: 2023-2-17 17:54
回帖后跳转到最后一页
作者: wuzonglin    时间: 2023-2-17 19:18
土土土土圭
作者: zzr1122333    时间: 2023-2-18 01:17
你好这个帖子真不错
作者: zzr1122333    时间: 2023-2-18 01:18
你好这个帖子真不错
作者: 创世魂    时间: 2023-2-19 09:12
qaz2428119 发表于 2023-2-15 09:57
其实也不算很难,只需留出一定的协议口,把插件与服务器之间的通信搞好,就可以实现真正的热插拔
麻烦的就是如 ...

重点是最好是用部件dll实现,目前来说部件dll好像无法实现热插拔。
这就比较难搞了。。
作者: 创世魂    时间: 2023-2-19 09:13
glbosom 发表于 2023-2-14 13:40
我用的不是部件,我用的是动态链接库 通过API动态加载和卸载来更新插件

...

这种肯定可以的,但是部件dll暂时就不知道了。有空再看看。。。
作者: 创世魂    时间: 2023-2-19 09:14
CPUCN 发表于 2023-2-14 15:27
我倒是觉得,推出一个部件开发的标杆例子倒是很好的
至于热更新没有太大的必要
毕竟这样的需求太少.

确实
作者: 创世魂    时间: 2023-2-19 09:16
CPUCN 发表于 2023-2-14 15:27
我倒是觉得,推出一个部件开发的标杆例子倒是很好的
至于热更新没有太大的必要
毕竟这样的需求太少.

热更新还是需要的。看用户量了,如果用户少,找个用户在线少的时候提前发公告更新服务器就行。。

用户多了就需要热插拔了。。
作者: lzj    时间: 2023-2-19 11:50
PHP免费的还是有市场的
作者: yb1984724    时间: 2023-2-20 17:55

感谢分享,下载学习。
作者: 小小小小鸟    时间: 2023-2-20 21:26
大家集思广益一起看看···
作者: 网络注册会员    时间: 2023-2-20 21:38
支持一下
作者: jsxy    时间: 2023-2-22 05:18
找到了
作者: qaz2428119    时间: 2023-2-22 20:40
创世魂 发表于 2023-2-19 09:12
重点是最好是用部件dll实现,目前来说部件dll好像无法实现热插拔。
这就比较难搞了。。 ...

你是总版本都搞不定 那我们这些小白就更不可能了
作者: 韦贝贝    时间: 2023-2-23 08:29
感谢分享,下载学习。
作者: leing    时间: 2023-3-2 09:59
我来看看
作者: gshhgshb    时间: 2023-3-23 23:28
【解决方案】火山视窗服务器插件化开发研究_部件DLL案例
作者: dzb123    时间: 2023-4-2 07:30
学习了 !!!!
作者: xq45654    时间: 2023-4-7 12:17
学习学习
作者: IvzCX    时间: 2023-4-7 16:02
学习
作者: 995999349    时间: 2023-4-23 15:35
666666666666666
作者: zhou425    时间: 2023-4-24 14:32
11111111111111
作者: lsfeeling    时间: 2023-4-26 09:53
现在项目可能会用的这个。下载看看学习一下
作者: 阿超一九九八    时间: 2023-5-7 17:23
来学习下。。。。
作者: jinminghuayx    时间: 2023-5-26 12:59
6666
作者: 389004294    时间: 2023-5-30 21:47
学习一下
作者: gyf烛光    时间: 2023-5-30 23:12

学习一下
作者: 3219720339    时间: 2023-5-31 04:11
11111111111111111

作者: 389004294    时间: 2023-6-1 11:12
插件化开发, 采用内存模块可行不?
内存模块加载的dll是不是加载完就把dll全部缓存到内存中了.加载过后就可以删除dll了!
比较耗费内存
作者: 傲慢与偏见    时间: 2023-6-2 10:28
谢谢分享
作者: 唐兀    时间: 2023-6-8 22:56
学习下
作者: yhobo    时间: 2023-6-9 22:39
本帖最后由 yhobo 于 2023-6-9 22:45 编辑

要实现热更新,其实就和应用程序里让用户可以二次编程一样,需要内置解释性编程引擎。。 比如火山PC实现不光可以编译运行,也可以解释运行。这样就可以实现主代码热更新。也可以实现一些比如用户自定义报表(多表组合然后运算出新的非预置的报表。) 我能想到就这个。。目前对火山PC了解有限
也可以用PC自己写解释性执行的主框架,也就是自己写一解释器,解释性的执行PC命令使其可以组合使用,因为主框架命令并不复杂,所以理论上完全是可以实现的。然后各功能模块再用你这个DLL热加载


作者: yhobo    时间: 2023-6-9 22:49
然后延申下,这也可以成为一种程序架构,界面,事件触发什么的都用解释性编程来解决。。。那肯定也很哇塞,所以火山应该再弄一个自己的解释性编程引擎。。
作者: pc32    时间: 2023-6-12 15:49
【解决方案】火山视窗服务器插件化开发研究_部件DLL案例 [修改]
作者: fan15500    时间: 2023-6-12 21:16
服务器端对于热更新要求不是很高,甚至没有也行.毕竟数据一致性大于便利性.
开发软件的时候,特别是服务器端软件,应该养成分类的习惯,根据业务或者是功能来分类成一个个小的文件.类等等.
火山有很大的开发微服务的优势,在火山上非常好理解.就是围绕一个核心,根据业务 功能写多个软件而已.再加上互通功能,最简单的微服务就出来了.


能插件化,就已经很OK了.也有其他办法可以动态加载.总之很棒.

作者: wuji521314    时间: 2023-6-24 00:29
谢谢分享6
作者: pengtusheng    时间: 2023-8-22 16:12
部件还得要主程序调用,主程序调用还得更新主程序,不能用热更新.
作者: 凝逸AI    时间: 2023-9-10 18:17
部件DLL
作者: 刘喆    时间: 2023-9-13 12:35

作者: fangcl    时间: 2023-10-6 17:59
学习中,感谢分享
作者: suyan    时间: 2023-10-8 20:13
学习的
作者: 老鼠哥    时间: 2023-10-9 17:03
吧v成本v成本
作者: zz811127    时间: 2023-10-12 08:50
看看
作者: liyunxing    时间: 2023-10-16 15:10
学习下,如果能实现插件化开发,那就真的太好了!
作者: Huoyan    时间: 2023-10-18 22:20
试试吧,学习一下
作者: TANE    时间: 2023-10-24 05:02
学习。。。
作者: qh1908    时间: 2023-12-27 15:56
okokokok
作者: zhx200    时间: 2023-12-29 10:33
魂魂的方案要好好学习
作者: 猥琐的怪蜀黍    时间: 2023-12-29 13:28
学习 看看~~~~~~~~~~~~~~~~~
作者: aspinfo    时间: 2023-12-29 17:40
【解决方案】火山视窗服务器插件化开发研究_部件DLL案例
作者: hs999xl    时间: 2024-1-5 21:22
学习,看看
作者: QQ_4004E7    时间: 2024-1-19 10:41
看看 学习一下~!
作者: 雪玳缘    时间: 2024-1-19 10:43
看看 学习一下~~~~~!




欢迎光临 火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4