游戏服务器中多线程之间如何通信

来源:小编 时间:2021-08-07 09:02:33阅读:0

在游戏服务器中,进程的管理方法是头等大事,由于进程总数不可以过多,因此为了更好地提升游戏服务器高并发性,就需要在进程解决业务流程的速率要快,不可以长期卡死进程,例如,不可以有网络io,硬盘IO等用时的实际操作。因此大家会把比较有限的线程数进配各尽所能。进程的主要分配方式以下:

1,与客户端的IO进程

承担接受客户端信息,和向客户端推送信息。

2,解决游戏玩家业务流程的逻辑性进程

承担领域模型的解决与测算。

3,解决rpc或数据库同歩的网络进程。

承担不一样服务项目中间的通讯

4,解决日志的硬盘IO进程

相对应的进程各自做好自己该做的時间。可是此刻问题来啦,即然按主要用途分派了这种进程,那不能完全免费的便会出现不一样进程中间的数据信息交互了。举个事例而言,例如游戏玩家登录和排长队,倘若说一个区一台物理机,解决与客户端的IO进程占一个,领域模型进程16个,要求数据库的进程3个。其他的先忽视算不上。这个时候,服务器接到客户端登录的要求,业务流程进程接到这一要求,第一件事儿是去数据库查客户的信息内容,由于领域模型进程是多个客户中间同用的,因此你不能在这儿等候数据库要求的回到,否则变卡其他领域模型解决。最好是的作法便是,把这个要求封裝成一个事情,发送至数据库同歩进程中去解决这一事。等候数据库进程解决完后,再把結果告知领域模型进程,随后再解决业务流程,这个时候解决的数据信息都是在运行内存中了,因此速率十分快,解决完以后再回到客户端。

有些人说,那那样还并不是卡登录吗?是的,必卡登录,由于解决数据库的进程就那麼3个。针对mysql的查看性能测试以下:

大家3个进程按1500个测算,那麼也只有登录高并发达到1500的情况下,才会感觉服务项目慢一些,(具体情况很有可能会再底一些),假如高并发能达到那么高,表明游戏很爆火,可以等候点钱了。假如再多的人,大家就可以使用排长队的功能的。可以查看到数据库进程中已经等候执行任务的总数,假如达到某一值,就可以在业务流程服务项目中给客户端回到已经排长队的,让客户端过一会再去要求就可以。

返回主题,那麼游戏服务器进程中间该怎样传递数据呢,很有可能每一个人的作法不一样,这儿只例举中一个,期待给大家给带来些参照,就当是学习交流了。假如您有更强的方式 ,也期待您评价分享。

在Java中,线程同步中间交互数据信息,即A进程给B进程一个要求事情,A进程还需要获得B进程的实行結果,例如登录,请数据库进程去查库,查过以后告知逻辑性进程。Java提供了一个Future/Callable的体制,详尽大家可以全自动百度搜索他们的使用方法,可是他们有一个缺陷,便是A进程在获得結果时(启用future.get())的情况下是同歩的,假如B进程沒有实行完,还是变卡A进程。这表明并不是大家要想的。针对这一点,大家杰出的多线程架构,netty的创作者得出了一个解决方式 ,那便是Future/promise方式。这儿对它的源代码暂不做分皙了,有时间另发表文章表明吧,有兴趣爱好的同学们可以自身查询。这儿只说一下它的使用方法。

此编码仅仅仿真模拟,真正应用中还需要自身设计,最先是数据库查看的管理类专业:

随后是业务流程管理类:

根据这一事例,其他有关线程同步交互数据信息的功能完成,大家就可以举一回到三了。

微云网络为网络游戏运营企业提供了高性能、高可用性、可扩展性、性价比高的IDC数据中心解决方案!详詢网上客服!

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqzy/1754.html

TAG标签:游戏服务器游戏服务器租用

相关推荐

返回顶部