一种对在线用户分布式服务器进行动态扩容的方法及系统与流程

文档序号:31861232发布日期:2022-10-19 04:58阅读:53来源:国知局
一种对在线用户分布式服务器进行动态扩容的方法及系统与流程

1.本发明涉及服务器扩容技术领域,特别是一种对在线用户分布式服务器进行动态扩容的方法及系统。


背景技术:

2.现有技术中游戏服务器和web服务器不同的是:游戏服务器和用户之间需要互相推送消息,所以和客户端保持的是socket长连接。服务器的最大长连接数会有一个瓶颈,无法无限增加,如果没有预估好在线玩家的数量,将导致用户出现排队卡顿等不好的游戏体验。如果过分预估在线玩家数量,又会对服务器资源造成浪费。


技术实现要素:

3.为克服上述问题,本发明的目的是提供一种对在线用户分布式服务器进行动态扩容的方法,能够根据用户的当前链接数,动态对游戏服务器进行扩容,节省前期服务资源成本。
4.本发明采用以下方案实现:一种对在线用户分布式服务器进行动态扩容的方法,所述方法包括如下步骤:
5.步骤s1、用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip;
6.步骤s2、客户端根据返回的游戏服务器ip信息和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中;
7.步骤s3、用户发送全屏指令,游戏服务器收到指令后,对本服务器内存变量connmap中保存所有用户进行转发,读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器;
8.步骤s4、定时获取游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令;
9.步骤s5、游戏服务器收到在线用户迁移指令后,遍历内存变量connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果新的服务器ip和当前服务器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
10.进一步的,步骤s2进一步具体为:客户端根据返回的信息得到要进行连接,则得到游戏服务器ip后,和游戏服务器保持长连接,游戏服务器把用户的id和当前链接保存在内存的变量connmap中,connmap是一个key-value的字典类型,存储在内存变量中,key为用户id,value是用户socket链接。
11.进一步的,所述步骤s3进一步包括:其他游戏服务器收到消息后也对本服务器内
存列表所有用户进行转发,具体为:除了和本服务器链接的用户会收到指令外,其他游戏服务器的用户也需要收到此指令,则本服务器会从配置中心consul读取最新的游戏服务器列表,向除自己之外的其他游戏服务器转发该指令,其他游戏服务器收到消息后也对本服务器的内存变量connmap进行遍历和转发指令。
12.进一步的,所述步骤s5进一步具体为:游戏服务器收到在线用户迁移指令后,遍历内存变量connmap的在线用户链接,重新通过用户id对游戏服务器数量进行取模得到新的编号j,即用户重新取模用户id%游戏服务器数量,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果发现新的服务器ip和当前服务器ip不一致,则需要进行迁移,向该用户链接发送重新链接的指令,客户端根据该指令断开与当前服务器的链接,重新和新的游戏服务器建立链接,如果新的服务器ip和当前服务器ip相同则无需迁移。
13.本发明提供了一种对在线用户分布式服务器进行动态扩容的系统,所述系统包括服务器ip获取模块、内存处理模块、发送指令模块、服务器扩容模块、数据迁移模块;
14.所述服务器ip获取模块,在用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip;
15.所述内存处理模块,通过客户端根据返回的游戏服务器ip信息和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中;
16.所述发送指令模块,在用户发送全屏指令后,游戏服务器收到指令后,对本服务器内存变量connmap中保存所有用户进行转发,读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器;
17.所述服务器扩容模块,定时获取游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令;
18.所述数据迁移模块,在游戏服务器收到在线用户迁移指令后,遍历内存变量connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果新的服务器ip和当前服务器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
19.进一步的,所述内存处理模块的实现方式进一步具体为:客户端根据返回的信息得到要进行连接,则得到游戏服务器ip后,和游戏服务器保持长连接,游戏服务器把用户的id和当前链接保存在内存的变量connmap中,connmap是一个key-value的字典类型,存储在内存变量中,key为用户id,value是用户socket链接。
20.进一步的,所述发送指令模块进一步包括:其他游戏服务器收到消息后也对本服务器内存列表所有用户进行转发,具体为:除了和本服务器链接的用户会收到指令外,其他游戏服务器的用户也需要收到此指令,则本服务器会从配置中心consul读取最新的游戏服务器列表,向除自己之外的其他游戏服务器转发该指令,其他游戏服务器收到消息后也对本服务器的内存变量connmap进行遍历和转发指令。
21.进一步的,所述数据迁移模块的实现方式进一步具体为:游戏服务器收到在线用户迁移指令后,遍历内存变量connmap的在线用户链接,重新通过用户id对游戏服务器数量
进行取模得到新的编号j,即用户重新取模用户id%游戏服务器数量,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果发现新的服务器ip和当前服务器ip不一致,则需要进行迁移,向该用户链接发送重新链接的指令,客户端根据该指令断开与当前服务器的链接,重新和新的游戏服务器建立链接,如果新的服务器ip和当前服务器ip相同则无需迁移。
22.本发明的有益效果在于:根据返回的游戏服务器ip和游戏服务器保持长连接,将游戏服务器保存用户id和socket链接至内存变量connmap中,定时计算游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令,从而能够根据用户的当前链接数,动态对游戏服务器进行扩容,节省前期服务资源成本。
附图说明
23.图1是本发明的方法流程示意图。
24.图2是本发明的系统工作原理图。
具体实施方式
25.下面结合附图对本发明做进一步说明。
26.请参阅图1所示,本发明的一种对在线用户分布式服务器进行动态扩容的方法,所述方法包括如下步骤:
27.步骤s1、用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip;
28.步骤s2、客户端根据返回的游戏服务器ip信息和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中;
29.步骤s3、用户发送全屏指令,游戏服务器收到指令后,对本服务器内存变量connmap中保存所有用户进行转发,读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器;
30.步骤s4、定时获取游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令;
31.步骤s5、游戏服务器收到在线用户迁移指令后,遍历内存变量connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果新的服务器ip和当前服务器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
32.下面结合一具体实施例对本发明做进一步说明:
33.一种对在线用户分布式服务器进行动态扩容的方法,主要思路如下:1、用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip。2、
客户端根据返回的游戏服务器ip和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中。3、用户发送全屏指令,游戏服务器收到指令后,对本服务器内存变量connmap中保存所有用户进行转发。读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器,其他游戏服务器收到消息后也对本服务器内存列表所有用户进行转发。4、定时计算游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令。5、游戏服务器收到在线用户迁移指令后,遍历内存connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从consul的游戏服务器列表中得到相应编号的新服务器ip,如果新服务器ip和当前服务器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
34.本发明的方法,具体步骤如下:
35.步骤一、用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip。
36.假设当前有4台游戏服务器,用于给在线用户发送游戏指令。用户在链接游戏服务器之前会先通过客户端登录用户系统得到用户id=106,从配置中心consul读取当前游戏服务器列表list,得到游戏服务器列表的数量n=4,用id%n即106%4得到i=2,从list中得到编号=2的游戏服务器ip,返回客户端用户需要链接的游戏服务器ip{action=conn,ip=110.0.10.2}。
37.步骤二、客户端根据返回的游戏服务器ip和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中。
38.客户端根据返回的信息得到action=conn知道要进行链接,得到游戏服务器ip=110.0.1.2和游戏服务器保持长连接,游戏服务器把用户的id和当前链接保存在内存的connmap中,connmap是key-value的字典类型,存储在内存变量中,key为用户id,value是用户socket链接。例如存储的数据如下:{106:socket1,107:socket2}。
39.步骤三、用户发送全屏指令,游戏服务器收到指令后,对本服务器内存connmap中保存所有用户进行转发。读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器,其他游戏服务器收到消息后也对本服务器内存列表所有用户进行转发。
40.用户在游戏客户端中发送全屏指令,例如游戏用户发布了一个全屏的聊天内容,需要转发至当前所有的在线用户。用户发送的全屏指令{action=allmsg,text=聊天内容},首先和该用户保持链接的编号=2的游戏服务器最先会收到,该服务器会把当前内存中的connmap进行遍历,逐一向和本服务器链接的用户转发指令。
41.除了和本服务器链接的用户会收到指令外,其他服务器的用户也需要收到此指令,所以编号=2的游戏服务器会从consul读取最新的游戏服务器列表,向除自己之外的其他服务器转发该指令{action=allmsg,text=聊天内容}。其他游戏服务器收到消息后也对本服务器的内存connmap进行遍历和转发指令。
42.步骤四、定时计算游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过2000,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令。
43.游戏服务器定时计算内存connmap的在线用户链接数量,如果当前服务器的链接用户数量超过2000,则启用备用服务器,把备用服务器加入consul的游戏服务器列表,这样游戏服务器从4台变为5台,接着向所有游戏服务器发送在线用户迁移指令{action=move,count=5}。
44.步骤五、游戏服务器收到在线用户迁移指令后,遍历内存connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从consul的游戏服务器列表中得到相应编号的新服务器ip,如果新服务器ip和当前服务器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
45.游戏服务器收到在线用户迁移指令后,遍历内存connmap的在线用户链接,重新对用户id对游戏服务器数量进行取模得到新的编号j,例如用户id=106的用户重新取模id%n即106%5得到j=1,根据j从consul的游戏服务器列表中得到相应编号的新服务器ip=110.0.10.1,发现ip和当前服务器ip不一致,则需要进行迁移,向该用户链接发送重新链接的指令{action=reconn,ip=110.0.10.1},客户端根据该指令断开与本地的游戏服务器110.0.10.2的链接,重新和游戏服务器110.0.10.1建立链接。
46.请参阅图2所示,本发明提供了一种对在线用户分布式服务器进行动态扩容的系统,所述系统包括服务器ip获取模块、内存处理模块、发送指令模块、服务器扩容模块、数据迁移模块;
47.所述服务器ip获取模块,在用户登录客户端后通过用户id对当前游戏服务器数量进行取模得到编号i,根据i从配置中心consul的游戏服务器列表中得到相应编号的服务器ip,返回客户端用户需要链接的服务器ip;
48.所述内存处理模块,通过客户端根据返回的游戏服务器ip信息和游戏服务器保持长连接,游戏服务器保存用户id和socket链接至内存变量connmap中;,所述内存处理模块的实现方式进一步具体为:客户端根据返回的信息得到要进行连接,则得到游戏服务器ip后,和游戏服务器保持长连接,游戏服务器把用户的id和当前链接保存在内存的变量connmap中,connmap是一个key-value的字典类型,存储在内存变量中,key为用户id,value是用户socket链接。
49.所述发送指令模块,在用户发送全屏指令后,游戏服务器收到指令后,对本服务器内存变量connmap中保存所有用户进行转发,读取配置中心consul获得所有游戏服务器列表,将消息转发至其他游戏服务器;所述发送指令模块进一步包括:其他游戏服务器收到消息后也对本服务器内存列表所有用户进行转发,具体为:除了和本服务器链接的用户会收到指令外,其他游戏服务器的用户也需要收到此指令,则本服务器会从配置中心consul读取最新的游戏服务器列表,向除自己之外的其他游戏服务器转发该指令,其他游戏服务器收到消息后也对本服务器的内存变量connmap进行遍历和转发指令。
50.所述服务器扩容模块,定时获取游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令;
51.所述数据迁移模块,在游戏服务器收到在线用户迁移指令后,遍历内存变量connmap,根据用户id对最新游戏服务器数量进行取模得到新的编号j,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果新的服务器ip和当前服务
器ip相同则无需迁移,如果不同则向客户端发送新的链接ip和重链指令。
52.所述数据迁移模块的实现方式进一步具体为:游戏服务器收到在线用户迁移指令后,遍历内存变量connmap的在线用户链接,重新通过用户id对游戏服务器数量进行取模得到新的编号j,即用户重新取模用户id%游戏服务器数量,根据j从配置中心consul的游戏服务器列表中得到相应编号的新的服务器ip,如果发现新的服务器ip和当前服务器ip不一致,则需要进行迁移,向该用户链接发送重新链接的指令,客户端根据该指令断开与当前服务器的链接,重新和新的游戏服务器建立链接,如果新的服务器ip和当前服务器ip相同则无需迁移。
53.总之,本发明根据返回的游戏服务器ip和游戏服务器保持长连接,将游戏服务器保存用户id和socket链接至内存变量connmap中,定时计算游戏服务器当前维持链接的用户数量,上报至配置中心consul,如果任意游戏服务器当前用户数超过预设值,则启用备用服务器加入配置中心consul的游戏服务器列表,并且向所有服务器发送在线用户迁移指令,从而能够根据用户的当前链接数,动态对游戏服务器进行扩容,节省前期服务资源成本。
54.以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1