CN114785687A - 一种基于golang语言的服务器热更新方法、服务器及可读介质 - Google Patents
一种基于golang语言的服务器热更新方法、服务器及可读介质 Download PDFInfo
- Publication number
- CN114785687A CN114785687A CN202210673979.3A CN202210673979A CN114785687A CN 114785687 A CN114785687 A CN 114785687A CN 202210673979 A CN202210673979 A CN 202210673979A CN 114785687 A CN114785687 A CN 114785687A
- Authority
- CN
- China
- Prior art keywords
- server
- server process
- client
- socket
- hot
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0813—Configuration setting characterised by the conditions triggering a change of settings
- H04L41/082—Configuration setting characterised by the conditions triggering a change of settings the condition being updates or upgrades of network functionality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种基于golang语言的服务器热更新方法、服务器及可读介质,通过使多个进程监听同一地址,通过不同进程间数据迁移的方法使得服务器进程间能够相互通信以及进行数据的迁移,实现新旧服务器进程之间的无缝衔接,大量的省去了更新时间,实现了golang服务器的热更新,同时降低了人工维护的成本,同时在进行热更新时,不会打断用户的使用,增加了用户的体验。
Description
技术领域
本发明涉及服务器更新领域,具体涉及一种基于golang语言的服务器热更新方法、服务器及可读介质。
背景技术
游戏软件产品开发完成以后,为了使新开发的游戏软件产品功能够过快速上线或者能够及时修复软件产品的bug,并且对正在使用游戏软件产品的用户无任何影响。需要一种服务器热更新代码的方法与系统来进行处理。
目前市面上的服务器更新方案为将服务器重启,这样消耗的时间较长,这种方法都是通过降低用户体验的方式来进行更新,无法在服务器运行的过程中进行用户无法感知的热更新。
由于golang语言是一种静态强类型、并发型语言,在提供了快速开发、高性能有点的同时也是一种编译型语言,导致golang语言在程序执行过程中无法修改其代码逻辑,热更新困难。
发明内容
有鉴于此,本发明提供一种基于golang语言的服务器热更新方法、服务器及可读介质,通过使多个进程监听同一地址,进程间数据迁移的方法来进行基于golang语言服务器的热更新,具有更新时间快、人工成本低、提高用户体验等特点。
本发明提供一种基于golang语言的服务器热更新方法,所述方法包括:
S1:第一服务器进程与第二服务器进程通信,使第二服务器进程开启端口复用权限;
S2:所述第二服务器进程停止监听TCP socket,不再接收新的客户端连接请求,所述第一服务器进程通过所述TCP socket接收所述新的客户端连接请求;
S3:所述第二服务器进程关闭Epoll处理协程,停止处理所述客户端连接的新消息,将所述客户端连接的新消息保存至缓冲区,并将所述客户端连接的连接属性及数据迁移至所述第一服务器进程;
S4:所述第一服务器进程设置客户端socket和连接属性,并使所述第一服务器进程通过监听所述TCP socket处理客户端请求。
优选的,所述S1包括:
S11:将所述第二服务器进程的服务器地址绑定至TCP socket文件描述字,使所述第二服务器进程与所述客户端连接,监听TCP socket并进行数据收发;
S12:所述第一服务器进程通过域套接字与所述第二服务器进程通信,通知所述第二服务器进程开启端口复用;
S13:所述第一服务器进程接收所述第二服务器进程开启端口复用的反馈通知;将所述第一服务器进程的服务器地址绑定至TCP socket文件描述字。
优选的,所述TCP socket具体为协议域为AF_INET、类型为Sock_Stream、协议为TCP传输协议的socket。
优选的,所述S3包括:
S31:所述第二服务器进程关闭Epoll处理协程,停止通过Epoll处理所述端口的可读事件,使所述第二服务器停止处理客户端连接的新消息;
S32:将客户端连接的新消息保存至缓冲区,使所述客户端新发送的消息不会被第二服务器进程读取;
S33:当所述第二服务器进程处理完成当前所述客户端消息后,所述第二服务器进程迁移当前客户端连接的数据和连接属性至第一服务器进程。
优选的,所述第二服务器进程通过域套接字迁移数据与连接属性至第一服务器进程。
优选的,所述S4包括:
S41:所述第一服务器进程设置客户端socket和连接属性;
S42:所述第一服务器进程通过EpollEvent通知Epoll添加可读事件,从消息缓冲区读取数据并处理;
S43:所述第一服务器进程监听所述TCP socket处理客户端请求。
本发明还提供一种服务器,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现所述的服务器进程更新方法。
一种计算机可读介质,其特征在于,所述计算机可读介质存储有机器可执行指令,所述机器可执行的指令执行时实现所述的基于golang语言的服务器热更新方法。
本发明的首要改进之处为通过使多个进程监听同一地址,通过不同进程间数据迁移的方法使得服务器进程间能够相互通信以及进行数据的迁移,实现新旧服务器进程之间的无缝衔接,大量的省去了更新时间,实现了golang服务器的热更新,同时降低了人工维护的成本,同时在进行热更新时,不会打断用户的使用,增加了用户的体验。
附图说明
图1为一种基于golang语言的服务器热更新方法示意图。
具体实施方式
为了使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施方式对本发明作进一步的详细说明。
本发明提供的一种基于golang语言的服务器热更新方法,如图1所示,该方法包括:
S1:第一服务器进程与第二服务器进程通信,使第二服务器进程开启端口复用权限;
具体的,第二服务器进程启动后,将服务器地址绑定至TCP socket文件描述字,使第二服务器进程与客户端连接,监听TCP socket并进行数据收发。
需要说明的是,所述TCP socket具体为协议域为AF_INET、类型为Sock_Stream、协议为TCP传输协议的socket。
服务器进程通过listen函数来监听所述TCP socket,创建一个epoll的句柄,并添加所述TCP socket文件描述字的可读事件,此时如果客户端调用connect函数发出连接请求,服务器进程就会监听到该请求;
服务器进程监听到该请求后,调用accpet函数接收该请求,并建立TCP连接,获取客户端socket文件描述字,通过epoll添加可读事件,当epoll触发可读事件后,通过客户端socket文件描述字接收消息;
当服务器进程接收到客户端消息后,进行逻辑处理,并通过客户端socket文件描述字发送消息。
需要说明的是,在将服务器地址绑定至TCP socket文件描述字之前需要开启一次端口复用权限以激活端口复用功能,并在开始监听后关闭端口复用权限,以防止其他进程误用。
启动第一服务器进程,第一服务器进程获取第二服务器进程当前监听的端口号,并通过域套接字与第二服务器进程通信,第一服务器进程通知第二服务器进程开启端口复用权限,第二服务器进程接收到第一服务器进程的通知后开启端口复用权限,第二服务器进程反馈开启成功的通知至第一服务器。
开启端口复用权限后,一个地址能够被多个进程进行监听,使两个进程过渡的过程更加平滑。
S2:所述第二服务器进程停止监听TCP socket,不再接收新的客户端连接请求,所述第一服务器进程通过所述TCP socket接收所述新的客户端连接请求;
需要说明的是,在第二服务器进程停止监听TCP socket后,第一服务器进程接收新的客户端连接,并开始处理来自新的客户端连接发送的消息;
其中,第一服务器进程接收到新的客户端连接后,需要对客户端socket设置SetNonblock、SetTCPNoDelay, SetKeepAlive函数,并通过EpollEvent通知Epoll添加可读事件,等待Epoll触发可读事件后,第一服务器进程通过客户端socket文件描述字接收新客户端连接发送的消息。
S3:所述第二服务器进程关闭Epoll处理协程,停止处理所述客户端连接的新消息,将所述客户端连接的新消息保存至缓冲区,并将所述客户端连接的连接属性及数据迁移至所述第一服务器进程;
第二服务器进程关闭Epoll的处理协程,停止通过Epoll处理客户端套接字的可读事件,客户端发送的消息被保存在缓冲区,不会被第二服务器进程读取。
等待第二服务器进程处理完成最后一个客户端消息后,所述第二服务器进程迁移连接属性及数据至第一服务器进程。
其中,第二服务器进程通过域套接字发送客户端socket文件描述字与连接属性至第一服务器进程。
需要说明的是,所述连接属性及数据为socket文件描述字、TCP粘包数据以及会话session属性。
S4:所述第一服务器进程设置客户端socket和连接属性,并使所述第一服务器进程通过监听所述TCP socket处理客户端请求。
需要说明的是,当第一服务器进程接收到客户端socket文件描述字与连接属性后,也需要通过对客户端socket设置SetNonblock、SetTCPNoDelay, SetKeepAlive函数,并通过EpollEvent通知Epoll添加可读事件,等待Epoll触发可读事件后,第一服务器进程通过客户端socket文件描述字接收从第二服务器进程迁移至第一服务器进程的客户端连接发送的消息。
接收到客户端消息后,第一服务器进程对消息进行逻辑处理,并通过客户端socket文件描述字发送消息至客户端,保障了消息处理的有效性。
需要说明的是,在迁移完成后,第一服务器进程从缓冲区读取客户端消息,通过Epoll的消息处理协程完成消息处理。由于客户端消息都在缓冲区暂存,不会存在消息丢失的情况。
使用不同服务器进程间的TCP socket迁移,在整个更新流程上更加的闭环,有利于后期的维护以及优化。
本申请提供的优选实施例能够在极快的时间内完成整个服务器的更新,并不会使用户的链接中断或者卡顿,极大地提高了用户的体验。
本发明还提供一种服务器,所述服务器包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现所述的服务器进程更新方法。
本发明也提供一种计算机可读介质,其特征在于,所述计算机可读介质存储有机器可执行指令,所述机器可执行的指令执行时实现所述的基于golang语言的服务器热更新方法。
以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种基于golang语言的服务器热更新方法,其特征在于,所述方法包括:
S1:第一服务器进程与第二服务器进程通信,使第二服务器进程开启端口复用权限;
S2:所述第二服务器进程停止监听TCP socket,不再接收新的客户端连接请求,所述第一服务器进程通过所述TCP socket接收所述新的客户端连接请求;
S3:所述第二服务器进程关闭Epoll处理协程,停止处理所述客户端连接的新消息,将所述客户端连接的新消息保存至缓冲区,并将所述客户端连接的连接属性及数据迁移至所述第一服务器进程;
S4:所述第一服务器进程设置客户端socket和连接属性,并使所述第一服务器进程通过监听所述TCP socket处理客户端请求。
2.根据权利要求1所述的一种基于golang语言的服务器热更新方法,其特征在于,所述S1包括:
S11:将所述第二服务器进程的服务器地址绑定至TCP socket文件描述字,使所述第二服务器进程与所述客户端连接,监听TCP socket并进行数据收发;
S12:所述第一服务器进程通过域套接字与所述第二服务器进程通信,通知所述第二服务器进程开启端口复用;
S13:所述第一服务器进程接收所述第二服务器进程开启端口复用的反馈通知;将所述第一服务器进程的服务器地址绑定至TCP socket文件描述字。
3.根据权利要求1所述的一种基于golang语言的服务器热更新方法,其特征在于,所述TCP socket具体为协议域为AF_INET、类型为Sock_Stream、协议为TCP传输协议的socket。
4.根据权利要求1所述的一种基于golang语言的服务器热更新方法,其特征在于,所述S3包括:
S31:所述第二服务器进程关闭Epoll处理协程,停止通过Epoll处理所述端口的可读事件,使所述第二服务器停止处理客户端连接的新消息;
S32:将客户端连接的新消息保存至缓冲区,使所述客户端新发送的消息不会被第二服务器进程读取;
S33:当所述第二服务器进程处理完成当前所述客户端消息后,所述第二服务器进程迁移当前客户端连接的数据和连接属性至第一服务器进程。
5.据权利要求4所述的一种基于golang语言的服务器热更新方法,其特征在于,所述第二服务器进程通过域套接字迁移数据与连接属性至第一服务器进程。
6.根据权利要求1所述的一种基于golang语言的服务器热更新方法,其特征在于,所述S4包括:
S41:所述第一服务器进程设置客户端socket和连接属性;
S42:所述第一服务器进程通过EpollEvent通知Epoll添加可读事件,从消息缓冲区读取数据并处理;
S43:所述第一服务器进程监听所述TCP socket处理客户端请求。
7.一种服务器,其特征在于,所述服务器包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6任一所述的服务器进程更新方法。
8.一种计算机可读介质,其特征在于,所述计算机可读介质存储有机器可执行指令,所述机器可执行的指令执行时实现权利要求1至6中任一项所述的基于golang语言的服务器热更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210673979.3A CN114785687B (zh) | 2022-06-15 | 2022-06-15 | 一种基于golang语言的服务器热更新方法、服务器及可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210673979.3A CN114785687B (zh) | 2022-06-15 | 2022-06-15 | 一种基于golang语言的服务器热更新方法、服务器及可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114785687A true CN114785687A (zh) | 2022-07-22 |
CN114785687B CN114785687B (zh) | 2022-10-21 |
Family
ID=82422040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210673979.3A Active CN114785687B (zh) | 2022-06-15 | 2022-06-15 | 一种基于golang语言的服务器热更新方法、服务器及可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114785687B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515748A (zh) * | 2019-08-28 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 一种消息处理的方法及相关装置 |
CN110784360A (zh) * | 2019-11-01 | 2020-02-11 | 浪潮云信息技术有限公司 | 一种实现Kong声明式配置热更新的方法及系统 |
CN111552496A (zh) * | 2020-05-07 | 2020-08-18 | 上海道客网络科技有限公司 | 一种基于添加临时容器实现无缝升级边车的系统与方法 |
CN112230965A (zh) * | 2020-10-30 | 2021-01-15 | 广东耐思智慧科技有限公司 | 一种应用程序内小程序热更新的系统和方法 |
CN112416383A (zh) * | 2020-01-21 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | golang程序热更新方法、装置以及计算机设备 |
CN112732404A (zh) * | 2021-01-08 | 2021-04-30 | 湖南同有飞骥科技有限公司 | 基于Lua协程的程序并发IO优化方法及系统 |
CN113342386A (zh) * | 2021-05-07 | 2021-09-03 | 武汉虚咖科技有限公司 | 一种go服务器热更新方法及相关设备 |
US20220131845A1 (en) * | 2019-04-30 | 2022-04-28 | Visa International Service Association | Decentralized Processing Of Interactions On Delivery |
-
2022
- 2022-06-15 CN CN202210673979.3A patent/CN114785687B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220131845A1 (en) * | 2019-04-30 | 2022-04-28 | Visa International Service Association | Decentralized Processing Of Interactions On Delivery |
CN110515748A (zh) * | 2019-08-28 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 一种消息处理的方法及相关装置 |
CN110784360A (zh) * | 2019-11-01 | 2020-02-11 | 浪潮云信息技术有限公司 | 一种实现Kong声明式配置热更新的方法及系统 |
CN112416383A (zh) * | 2020-01-21 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | golang程序热更新方法、装置以及计算机设备 |
CN111552496A (zh) * | 2020-05-07 | 2020-08-18 | 上海道客网络科技有限公司 | 一种基于添加临时容器实现无缝升级边车的系统与方法 |
CN112230965A (zh) * | 2020-10-30 | 2021-01-15 | 广东耐思智慧科技有限公司 | 一种应用程序内小程序热更新的系统和方法 |
CN112732404A (zh) * | 2021-01-08 | 2021-04-30 | 湖南同有飞骥科技有限公司 | 基于Lua协程的程序并发IO优化方法及系统 |
CN113342386A (zh) * | 2021-05-07 | 2021-09-03 | 武汉虚咖科技有限公司 | 一种go服务器热更新方法及相关设备 |
Non-Patent Citations (2)
Title |
---|
佚名: ""Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解"", 《HTTPS://WWW.CSDN.NET/DIANFU2892/ARTICLE/DETAILS/101466601.HTML》 * |
温列来: ""linux进程热更新go,Golang热更新原理"", 《HTTPS://WWW. CSDN.NET/WEIXIN_33941859/ARTICLE/DETAILS/116678199.HTML》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114785687B (zh) | 2022-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9740515B2 (en) | Exception handling method, apparatus, and client | |
US6687817B1 (en) | Configuration of a network device via the network | |
US7107329B1 (en) | In networks of interconnected router nodes for routing data traffic, a method of and system for imperceptibly upgrading router node software and the like without traffic interruption | |
EP3490224A1 (en) | Data synchronization method and system | |
WO2019184164A1 (zh) | 自动部署Kubernetes从节点的方法、装置、终端设备及可读存储介质 | |
JP2019530033A5 (zh) | ||
CN111770172A (zh) | 消息中间件消费代理方法、装置、代理服务器及存储介质 | |
KR20060051932A (ko) | 소프트웨어를 실행 동안 업데이트하는 시스템, 방법 및컴퓨터-판독가능 매체 | |
WO2019037374A1 (zh) | 用于安卓应用主进程唤醒的方法、存储介质、设备及系统 | |
CN103916424B (zh) | 一种管控应用程序心跳包的方法、通信终端和通信网络 | |
CN106559485B (zh) | 一种控制服务器关机的方法及装置 | |
CN110417913A (zh) | 一种基于Rabbit MQ的云服务器异步创建方法 | |
WO2023092778A1 (zh) | 一种虚拟机迁移时组播流量不间断的实现方法 | |
CN112511595B (zh) | 一种消息推送方法及消息服务系统 | |
CN114785687B (zh) | 一种基于golang语言的服务器热更新方法、服务器及可读介质 | |
WO2024103943A1 (zh) | 一种业务处理方法、装置、存储介质及设备 | |
CN110620695B (zh) | 一种数据处理方法及相关设备 | |
WO2016184315A1 (zh) | 一种基于网络连接服务的升级方法和装置 | |
CN109688011B (zh) | 一种基于OpenStack的agent选择方法及装置 | |
CN108228880B (zh) | 数据库管理系统调用外部函数的方法、装置、设备及介质 | |
CN114356533A (zh) | 微服务无感知发布系统、方法、电子设备及存储介质 | |
JP2776442B2 (ja) | 複合コンピュータシステム | |
CN109981365A (zh) | 数据监听方法、装置、用户设备及存储介质 | |
JP2001236280A (ja) | 端末からホストコンピュータへの再接続方式 | |
CN104298750B (zh) | 用于实时系统通信的更新处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Ma Jianhong Inventor before: Song Xiao |