您的位置:首页 > 运维架构 > 网站架构

全新架构设计

2016-01-22 23:55 357 查看

全新架构设计

缘由

本人从事游戏开发很多年一直都是游戏服务器端开发。

因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧。这样的环境下不得不逼迫我需要什么都会,什么做。

但是自我感觉好像什么都不精通。。。。。

好了好像偏题了!

回归正题

现在公司是做手游开发,java服务器 + U3D做客户端的mmo手游,仿魔兽世界!

做软件的都知道一个蛋疼的事情,那就是线上Bug。但是做服务的人更清楚另一个蛋疼的事情,就是在线更新,不停服更新。

知道的人,想想都蛋疼,当然不知道的,那就只能自己想象了。

View Code
我们先尝试运行一次



也许上面的打印太乱,我们看看简洁版本的



上面我们看样看出来,功能是没有问题的。

如果你稍微注意了,或者看过我之前的文章的话,会发现我的这个脚本没有实现IBaseScript接口,而只继承了BaseScript抽象类。
因为这样的脚本不需要放到脚本存储器里面,只需要执行init函数,把脚本自身反注册到主程序函数体里面!

现在就是牵涉更新的事情。

更新有一个问题,当服务一旦部署后需要更新那就是的再次执行加载脚本方法。如果你使用windows服务运行的,更新势必是一个问题。

这里我只介绍一种方式,http监听方式。

要开启http监听方式,需要一个Net.Sz.Framework.Netty.Http.IHttpHandler的实现类

1 using Net.Sz.Framework.Log;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7
8
9 /**
10  *
11  * @author 失足程序员
12  * @Blog http://www.cnblogs.com/ty408/ 13  * @mail 492794628@qq.com
14  * @phone 13882122019
15  *
16  */
17 namespace TestApp
18 {
19     /// <summary>
20     ///
21     /// </summary>
22     public class ReloadScriptHandler : Net.Sz.Framework.Netty.Http.IHttpHandler
23     {
24         public void Action(Net.Sz.Framework.Netty.Http.HttpSession session, string method, string bindpath, Dictionary<string, string> parms)
25         {
26             Logger.Info("收到请求");
27
28             Net.Sz.Framework.Script.ScriptManager.GetInstance().LoadCSharpFile(new string[] { "../../../TestApp.Scripts/" });
29             MainManager.GetInstance().Test();
30
31             session.writeSuccess();
32             session.AddBodyLine("OK");
33             session.WriteFlush();
34         }
35     }
36 }


接下来我们在主函数加入下面代码

Dictionary<string, Net.Sz.Framework.Netty.Http.IHttpHandler> handlers = new Dictionary<string, IHttpHandler>();

handlers.Add("ReloadScript", new ReloadScriptHandler());//开启对http监听,监听模块为  ReloadScript

Net.Sz.Framework.Netty.NettyPool.GetInstance().AddHttpBind("127.0.0.1", 9527, handlers);


运行起来,看看,



可以看出,开启了http监听,reloadscript

然后我们修改一下MainManagerScript文件的Test方法

public void Test()
{
Logger.Info("我是test  修改过的版本");
}


在浏览器输入:http://127.0.0.1:9527/reloadscript



运行时成功的。这样的架构方式,很适合的是游戏开发,某些功能块很容易出bug,如果用脚本存储器访问比较耗费性能。

这样反向注册功能块脚本到功能块,既能实现bug的热更新,也不会影响性能消耗。

如果有疑问可以留言哦。如果你觉得这纯粹是扯淡,也欢迎留言。

不要问我,逻辑部分都是源码方服务器上安全吗?
难道你打包就安全了?
反编译,脱壳反混淆的工具一大堆。




上面是C#版本的,如果想要源码,

或者是java源码的,可以留言哦~!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: