0

0

利用Terracotta实现SmartFoxServer2X集群

php中文网

php中文网

发布时间:2016-06-07 15:30:36

|

1513人浏览过

|

来源于php中文网

原创

博客搬家啦——为了更好地经营博客,本人已经将博客迁移至www.ijavaboy.com。这里已经不再更新,给您带来的不便,深感抱歉!这篇文章的新地址:点击我 两个多月没有更新博客了,那是因为刚进入一个新的领域,疯狂地学习并工作。这两个月,对于我来说,是一次新的

博客搬家啦——为了更好地经营博客,本人已经将博客迁移至www.ijavaboy.com。这里已经不再更新,给您带来的不便,深感抱歉!这篇文章的新地址:点击我利用Terracotta实现SmartFoxServer2X集群


        两个多月没有更新博客了,那是因为刚进入一个新的领域,疯狂地学习并工作。这两个月,对于我来说,是一次新的旅程。从之前的android开发,一不小心溜入游戏服务器端的开发。现在,终于有了一点闲暇,记录一下这两个月中学到的和领悟到的知识。

        两个月前,进入一家做互联网3D产品的创业公司,而我负责的,正是服务器端的开发。和传统的3D游戏不同,这里没有复杂的游戏逻辑,只专注于产品需要的功能,客户端中不外乎用户的登陆和聊天等功能。而服务器端主要的任务就是处理用户的登陆登出和各种信息的同步。之前的一个月,学习了SmartFoxServer引擎,同时一并学习了下Unity3D引擎(因为客户端使用的是这个,学这个主要是为了可以很好地和客户端配合)。

        一直到几个星期前,当老大说要支持高达200000个用户同时在线的时候,才知道SFS2X试用版最多只可以支持100个用户,几经周折破解了SFS2X,消除了这个限制。但是,就算消除了限制,让一台机子同时处理200K个用户同时在线并操作,最后的结果只有一个——它将活活累死!于是,到SFS官方论坛和网站上寻求答案,虽然英文马马虎虎,但还可以表情达意,最终得知Terracotta是个好东东。而且官方有一个SmartFoxServer1.6和Terracotta集成的文档。

       正当我兴致突起,准备大干一场的时候,无意中被当头一棒——SmartFoxServer2X明确表态,从2X起,SmartFoxServer不再支持Terracotta集群。花了好几个昼昼夜夜,在其官方论坛上用那生硬的English发帖询问,结果终于得到证实,2X开始真的不支持或者不再提倡使用Terracotta来集群。再次看到1.6的那份官方集群文档的最后一句:

      Finally the future releases of SmartFoxServer  will move towards a tighter integration with Terracotta,
      to provide even more distributed services out of the box, and further simplify the development

我不禁哑然!

        后来,翻阅了大量了官方论坛上的帖子,却又找到官方人员的相关言论说,可以按照1.6思想的来使用Terracotta完成SFS的集群。于是,我决定尝试一把...

        写好了集群扩展的代码,当想要测试一把的时候,才发现,怎样让Terracotta识别SFS2X呢?也就是怎样将SFS2X作为Terracotta集群的客户端来启动呢?

       下载了1.6的集群的Demo,看到了它是使用了一个新的bat文件来启动的。看了下这个文件,其中含有Terracotta的启动包,终于明白了,原来如此。于是将其拷贝到

SFS2X的启动bat文件中,成功实现将SFS2X加入到Terracotta集群中。通过Terracotta Developer Console也可以看到连接上的客户端。

兴奋之余,将写好的SFS2X集群扩展Demo打了个jar包放到了SFS2X中,又写了个测试的Client,结果一运行,报了一个大大的异常,从异常信息看出,这个和ClassLoader有关。

        之前学习SFS2X的时候,看到过官方介绍过2X中使用了新的ClassLoader机制。核心SFS2X使用SystemClassLoader加载,每一个扩展使用一个新的ClassLoader进行加载,这样是为了方便应用扩展的热部署。但是,这个热部署我倒不太愿意用,现在又因为这个鸟东东和Terracotta集群有了冲突。

        从Terracotta的官方论坛中又再次得知,加载Terracotta中共享数据的ClassLoader必须命名,Terracotta就是根据ClassLoader的名称来完成不同JVM之间相同数据的同步。

        这下彻底死了个翘翘,难道注定了无法实现SFS2X和Terracotta的集成吗?心有不甘。。。

       这时,一个强烈的念头涌上心头,SmartFoxServer2X不是用java写的嘛,反编译你的源码,殊死一搏吧。

       这个时候,发现其代码并没有进行加密,心中大喜。反编译后的代码清楚无比,看到了在加载每个扩展的时候,其都定义了一个URLClassLoader来完成扩展的加载。那么我现在就需要替换掉这个URLClassLoader,而使用自己的定义的ClassLoader。

       于是引入Terracotta和SmartFoxServer相关的jar包,重新实现了个命了名的ClassLoader,让这个ClassLoader完成扩展的加载。

       打成jar包,替换掉原来的jar包,运行起来,OK!测试通过,集群终于实现。

       实现集群的目的,主要是为了分担负载和容错。那么现在如何实现负载均衡成为一个关键,看了很多关于负载均衡的资料,基本是基于Http请求的负载均衡。但是,对于像SmartFoxServer一样的游戏服务器端引擎来说,其使用的往往是Tcp或者Udp协议。而我们知道,Http协议是无状态的,用户的每一次请求都可以做到负载均衡。而Tcp或者Udp使用的是长连接的形式,用户一旦和某个物理机器连接了,那么直到他主动退出或者这个物理机器上的SmartFoxServer出现故障,否则其在登陆中所发出的每一次请求都是在同一个TCP或者UDP连接中完成的。那么如何实现SFS2X的负载均衡呢?

利用Terracotta实现SmartFoxServer2X集群



       有两个思路:

        1、客户端维护一个服务器端可用的SFS2X节点的列表,然后每次请求的时候随即获取一个进行连接,如果请求超时或者失败,则再重新选择一个尝试连接。但是这个方案不能根据负载状况进行请求。

        2、就是外加一个负载均衡服务器,这个服务器作为一个普通的Web Server。可以使用Tomcat或者Apache等。他主要的功能就是负责维护每个SFS2X节点的负载情况(每个节点上登陆的用户数)和可用的SFS2X节点信息。当一个客户端请求登陆SFS2X服务器的时候,其首先发送Http请求到这个WebServer,这个WebServer会查询并返回当前所有可用的节点和每个节点对应的负载信息。然后,客户端根据返回的数据,选择一个负载最小的节点进行连接。但是这个方案,这个单点的WebServer容易成为整个系统的瓶颈,同时可能成为单点故障。但是这个可以使用传统的负载均衡技术来避免这些问题。

利用Terracotta实现SmartFoxServer2X集群

        第一个基本排除,采用第二个。但是第二个又引发一个问题。就是负载均衡服务器和SFS2X集群如何完成数据的同步。是每个SFS2X节点每隔一定的时间将连接到本机的用户数等信息发送到一个存储媒介,这样,负载均衡服务器每次只需要查询这个存储媒介就可以了。但是,这个会成为瓶颈吗?

I DON'T KNOW,JUST TEST IT!











热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

1

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

101

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

12

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

85

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

5

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

93

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

25

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

72

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.5万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号