一种C++代码不中断运行更新方法及计算机系统技术方案

技术编号:35156979 阅读:54 留言:0更新日期:2022-10-12 17:14
本发明专利技术公开了一种C++代码不中断运行更新方法及计算机系统。该方法通过在待更新的C++程序中增设一个协议处理函数,利用进程间通信机制,通过请求

【技术实现步骤摘要】
一种C++代码不中断运行更新方法及计算机系统


[0001]本专利技术公开了一种C++代码不中断运行更新方法及计算机系统,涉及计算机运行代码更新领域。通过本专利技术提供的技术方案实现C++可执行程序在不停止运行/不重启的前提下,更新其中的功能函数并即时生效;尤其适用于更新服务器上正在运行、对外提供服务的C++可执行程序。

技术介绍

[0002]开发服务器运行程序时、为追求最好的性能一般会采用C++语言。为了实现开发的C++程序在运行时热更新、并且不停止对外提供服务,通常还会搭配其它脚本语言来进行开发和部署。虽然脚本可以热更新、但是如果运行的C++程序本身的功能逻辑有修改,对该C++程序更新时就需要重启服务器。而重启服务器会造成客户端连接的中断,重启时服务器进行数据/程序初始化也需要一定的时间;重启完成后、客户端重新连接服务器,往往需要再进行一次鉴权。如果服务器重启前连接的客户端较多(比如有五六千个),这些客户端在服务器重启完成后都将重新连接该服务器,这种情况下重启服务器成本太高,会对该服务器提供的服务、处理的业务会造成很大的影响。
[00本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种C++代码不中断运行更新方法,其特征在于,所述方法包括:将用于代替运行的C++程序中的旧函数、且与该旧函数同名的新函数编译到一个动态库中;对所述C++程序增设一个支持其采用所述动态库进行热更新的协议处理函数;在运行所述C++程序的计算机中启动一个进程,该进程接收到更新所述C++程序的请求时、调用所述协议处理函数实现采用所述动态库中、与指定旧函数同名的新函数来代替正在运行的所述C++程序中的所述指定旧函数进行执行。2.如权利要求1所述的方法,其特征在于,在编译所述动态库时所采用的编译环境与编译所述C++程序的编译环境相同。3.如权利要求1或2所述的方法,其特征在于,所述协议处理函数包括两个参数:所述C++程序中旧函数的名称,以及包含代替所述旧函数执行、与所述旧函数同名的新函数的动态库的名称;所述两个参数的取值在所述C++程序函数更新请求中进行指定。4.如权利要求3所述方法,其特征在于,所述协议处理函数具体实现为:加载用于代替所述旧函数执行的动态库;在内存中的所述C++程序的可执行文件中找到所述旧函数的地址,然后修改代码段、在所述地址处填入机器码使处理器在执行到所述机器码时跳转到所述动态库中与该旧函数同名的新函数处执行,执行完后返回内存中所述旧函数的下一个地址处继续执行。5.如权利要求4所述方法,其特征在于,所述C++程序在linux操作系统中执行,所述C++程序中旧函数的名称为所述旧函数在动态符号表中的符号名字;其中...

【专利技术属性】
技术研发人员:赵丰果
申请(专利权)人:盛趣信息技术上海有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1