一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于golang语言的服务器热更新方法、服务器及可读介质与流程

2022-07-23 07:13:28 来源:中国专利 TAG:


1.本发明涉及服务器更新领域,具体涉及一种基于golang语言的服务器热更新方法、服务器及可读介质。


背景技术:

2.游戏软件产品开发完成以后,为了使新开发的游戏软件产品功能够过快速上线或者能够及时修复软件产品的bug,并且对正在使用游戏软件产品的用户无任何影响。需要一种服务器热更新代码的方法与系统来进行处理。
3.目前市面上的服务器更新方案为将服务器重启,这样消耗的时间较长,这种方法都是通过降低用户体验的方式来进行更新,无法在服务器运行的过程中进行用户无法感知的热更新。
4.由于golang语言是一种静态强类型、并发型语言,在提供了快速开发、高性能有点的同时也是一种编译型语言,导致golang语言在程序执行过程中无法修改其代码逻辑,热更新困难。


技术实现要素:

5.有鉴于此,本发明提供一种基于golang语言的服务器热更新方法、服务器及可读介质,通过使多个进程监听同一地址,进程间数据迁移的方法来进行基于golang语言服务器的热更新,具有更新时间快、人工成本低、提高用户体验等特点。
6.本发明提供一种基于golang语言的服务器热更新方法,所述方法包括:s1:第一服务器进程与第二服务器进程通信,使第二服务器进程开启端口复用权限;s2:所述第二服务器进程停止监听tcp socket,不再接收新的客户端连接请求,所述第一服务器进程通过所述tcp socket接收所述新的客户端连接请求;s3:所述第二服务器进程关闭epoll处理协程,停止处理所述客户端连接的新消息,将所述客户端连接的新消息保存至缓冲区,并将所述客户端连接的连接属性及数据迁移至所述第一服务器进程;s4:所述第一服务器进程设置客户端socket和连接属性,并使所述第一服务器进程通过监听所述tcp socket处理客户端请求。
7.优选的,所述s1包括:s11:将所述第二服务器进程的服务器地址绑定至tcp socket文件描述字,使所述第二服务器进程与所述客户端连接,监听tcp socket并进行数据收发;s12:所述第一服务器进程通过域套接字与所述第二服务器进程通信,通知所述第二服务器进程开启端口复用;s13:所述第一服务器进程接收所述第二服务器进程开启端口复用的反馈通知;将
所述第一服务器进程的服务器地址绑定至tcp socket文件描述字。
8.优选的,所述tcp socket具体为协议域为af_inet、类型为sock_stream、协议为tcp传输协议的socket。
9.优选的,所述s3包括:s31:所述第二服务器进程关闭epoll处理协程,停止通过epoll处理所述端口的可读事件,使所述第二服务器停止处理客户端连接的新消息;s32:将客户端连接的新消息保存至缓冲区,使所述客户端新发送的消息不会被第二服务器进程读取;s33:当所述第二服务器进程处理完成当前所述客户端消息后,所述第二服务器进程迁移当前客户端连接的数据和连接属性至第一服务器进程。
10.优选的,所述第二服务器进程通过域套接字迁移数据与连接属性至第一服务器进程。
11.优选的,所述s4包括:s41:所述第一服务器进程设置客户端socket和连接属性;s42:所述第一服务器进程通过epollevent通知epoll添加可读事件,从消息缓冲区读取数据并处理;s43:所述第一服务器进程监听所述tcp socket处理客户端请求。
12.本发明还提供一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现所述的服务器进程更新方法。
13.一种计算机可读介质,其特征在于,所述计算机可读介质存储有机器可执行指令,所述机器可执行的指令执行时实现所述的基于golang语言的服务器热更新方法。
14.本发明的首要改进之处为通过使多个进程监听同一地址,通过不同进程间数据迁移的方法使得服务器进程间能够相互通信以及进行数据的迁移,实现新旧服务器进程之间的无缝衔接,大量的省去了更新时间,实现了golang服务器的热更新,同时降低了人工维护的成本,同时在进行热更新时,不会打断用户的使用,增加了用户的体验。
附图说明
15.图1为一种基于golang语言的服务器热更新方法示意图。
具体实施方式
16.为了使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施方式对本发明作进一步的详细说明。
17.本发明提供的一种基于golang语言的服务器热更新方法,如图1所示,该方法包括:s1:第一服务器进程与第二服务器进程通信,使第二服务器进程开启端口复用权限;
具体的,第二服务器进程启动后,将服务器地址绑定至tcp socket文件描述字,使第二服务器进程与客户端连接,监听tcp socket并进行数据收发。
18.需要说明的是,所述tcp socket具体为协议域为af_inet、类型为sock_stream、协议为tcp传输协议的socket。
19.服务器进程通过listen函数来监听所述tcp socket,创建一个epoll的句柄,并添加所述tcp socket文件描述字的可读事件,此时如果客户端调用connect函数发出连接请求,服务器进程就会监听到该请求;服务器进程监听到该请求后,调用accpet函数接收该请求,并建立tcp连接,获取客户端socket文件描述字,通过epoll添加可读事件,当epoll触发可读事件后,通过客户端socket文件描述字接收消息;当服务器进程接收到客户端消息后,进行逻辑处理,并通过客户端socket文件描述字发送消息。
20.需要说明的是,在将服务器地址绑定至tcp socket文件描述字之前需要开启一次端口复用权限以激活端口复用功能,并在开始监听后关闭端口复用权限,以防止其他进程误用。
21.启动第一服务器进程,第一服务器进程获取第二服务器进程当前监听的端口号,并通过域套接字与第二服务器进程通信,第一服务器进程通知第二服务器进程开启端口复用权限,第二服务器进程接收到第一服务器进程的通知后开启端口复用权限,第二服务器进程反馈开启成功的通知至第一服务器。
22.开启端口复用权限后,一个地址能够被多个进程进行监听,使两个进程过渡的过程更加平滑。
23.s2:所述第二服务器进程停止监听tcp socket,不再接收新的客户端连接请求,所述第一服务器进程通过所述tcp socket接收所述新的客户端连接请求;需要说明的是,在第二服务器进程停止监听tcp socket后,第一服务器进程接收新的客户端连接,并开始处理来自新的客户端连接发送的消息;其中,第一服务器进程接收到新的客户端连接后,需要对客户端socket设置setnonblock、settcpnodelay, setkeepalive函数,并通过epollevent通知epoll添加可读事件,等待epoll触发可读事件后,第一服务器进程通过客户端socket文件描述字接收新客户端连接发送的消息。
24.s3:所述第二服务器进程关闭epoll处理协程,停止处理所述客户端连接的新消息,将所述客户端连接的新消息保存至缓冲区,并将所述客户端连接的连接属性及数据迁移至所述第一服务器进程;第二服务器进程关闭epoll的处理协程,停止通过epoll处理客户端套接字的可读事件,客户端发送的消息被保存在缓冲区,不会被第二服务器进程读取。
25.等待第二服务器进程处理完成最后一个客户端消息后,所述第二服务器进程迁移连接属性及数据至第一服务器进程。
26.其中,第二服务器进程通过域套接字发送客户端socket文件描述字与连接属性至第一服务器进程。
27.需要说明的是,所述连接属性及数据为socket文件描述字、tcp粘包数据以及会话
session属性。
28.s4:所述第一服务器进程设置客户端socket和连接属性,并使所述第一服务器进程通过监听所述tcp socket处理客户端请求。
29.需要说明的是,当第一服务器进程接收到客户端socket文件描述字与连接属性后,也需要通过对客户端socket设置setnonblock、settcpnodelay, setkeepalive函数,并通过epollevent通知epoll添加可读事件,等待epoll触发可读事件后,第一服务器进程通过客户端socket文件描述字接收从第二服务器进程迁移至第一服务器进程的客户端连接发送的消息。
30.接收到客户端消息后,第一服务器进程对消息进行逻辑处理,并通过客户端socket文件描述字发送消息至客户端,保障了消息处理的有效性。
31.需要说明的是,在迁移完成后,第一服务器进程从缓冲区读取客户端消息,通过epoll的消息处理协程完成消息处理。由于客户端消息都在缓冲区暂存,不会存在消息丢失的情况。
32.使用不同服务器进程间的tcp socket迁移,在整个更新流程上更加的闭环,有利于后期的维护以及优化。
33.本技术提供的优选实施例能够在极快的时间内完成整个服务器的更新,并不会使用户的链接中断或者卡顿,极大地提高了用户的体验。
34.本发明还提供一种服务器,所述服务器包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现所述的服务器进程更新方法。
35.本发明也提供一种计算机可读介质,其特征在于,所述计算机可读介质存储有机器可执行指令,所述机器可执行的指令执行时实现所述的基于golang语言的服务器热更新方法。
36.以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献