【解决方案】火山视窗服务器插件化开发研究_部件DLL案例
本帖最后由 创世魂 于 2023-2-13 21:21 编辑火山视窗服务器插件化开发研究。
现在火山并没有出服务器插件,比如火山java,火山php,火山nodejs 等服务器开发。
比如:php虽然已经快丢进垃圾桶了,但是有个很好的优点,服务器更新基本上直接丢进去php文件覆盖就可以了。可以非常方便实现动态更新。(夸张一下请勿较真,毕竟php依然坚挺)震惊php排名第十
火山没有这些服务器开发,只能依靠windows开发服务器,这就面临一个问题,如何动态更新。
毕竟exe程序想要更新必须关闭软件才能实现,关闭软件也就意味着服务器关闭。
不过还好有另外一条路,那就是通过dll热加载实现,业务逻辑放进dll。需要修改的时候就修改dll文件即可。
但是这又面临一个问题,如果只想某个业务模块停止,如何做?
其实也很简单,这就需要在软件服务器开发初期,对服务器所需要的功能模块拆分。
比如:注册dll、登陆dll、等等……如果注册dll需要维护就单独停止注册dll业务。
于是乎就有了下面的案例。
本案例客户端和服务器是基于HP_pack通讯协议实现,实现了服务器注册登陆业务分离,当某个模块需要维护的时候停止此模块即可。
因为案例写的比较简单,仅供演示参考,请勿用于生产环境。
下载例子后,注意将“登陆DLL”和“注册DLL”两个项目右键,进行编译发布版,然后运行主服务器才能使用。
服务器插件化开发后:
优点:可以对模块进行动态更新,方便服务器维护升级。
缺点:
1、开发周期较长,对服务器程序逻辑思维有较高的要求。
2、需要提前规划好各个模块业务。
3、最大的缺点是,如果需要新增插件,需要停止整个服务器。因为插件逻辑是在“主服务器”源码中实现,新增插件必须对主服务器进行修改重新编译。
最后:至于能不能实现真正的热更新,新增插件也热更新?因为服务器插件是基于部件DLL实现,并不是自己通过类库动态载入的,所以就目前这个源码来说不能实现。
至于通过部件DLL能不能实现动态插件,比如放一个dll到目录中刷新插件列表,就可以直接加载新插件功能。。
目前好像部件不太好实现,如果有大佬有部件DLL的相关解决方案,欢迎贡献案例。
**** Hidden Message *****
来学习下。。。。 感谢分享,下载学习。 谁说的PHP丢垃圾桶了, 据我所知第3个缺点可以通过 boost.dll 这类的技术手段避免 哈哈,什么叫PHP“快丢进垃圾桶”,那请问火山和易语言了? 本帖最后由 1503123 于 2023-2-13 20:28 编辑
支持火山PHP 1503123 发表于 2023-2-13 15:37
谁说的PHP丢垃圾桶了,
哈哈哈,只是夸张一下。因为网上很多培训班啥的,基本都是教java啥的。。动不动就是java各种技术栈。
实际上php市场还是非常大。 东子 发表于 2023-2-13 19:39
哈哈,什么叫PHP“快丢进垃圾桶”,那请问火山和易语言了?
夸张一下,毕竟php底蕴生态和排名还是嘎嘎深的 龙纹 发表于 2023-2-13 16:03
据我所知第3个缺点可以通过 boost.dll 这类的技术手段避免
要火山里面能用的方案……不知道有没有大佬贡献一下解决方案,我暂时反正没想到。