【阿拉丁Unity分享】Scut游戏服务器入门篇——环境搭建
发表于2016-04-21
前言:
非常荣幸能加入蛮牛专栏作家群,跟其他专栏作家一起分享相关技术,希望大家多多学习交流。
本篇我就介绍一些Scut游戏服务器引擎,Scut是一款免费开源的游戏服务器引擎,适用于开发AVG、SLGRPG、MMO等类型的网络游戏,同事支持Http、WebSocket和Socket通讯协议,支持Windows、Mac和Linux多平台部署、支持Redis内存数据库和MSSQL数据库、MySql数据库;服务器框架基于C#编写,游戏逻辑层可以选择使用C#、Python和Lua多种脚本语言进行开发,支持热更新的方式部署,客户端可以使用Cocos2D、unity3D、FlashAir与服务器进行对接;提供了丰富的中间件、可以简单快捷的搭建您的游戏。介绍到这里大伙是否开始心动了呢,关键还是开源免费哦!这对于我们Unity客户端工程师来说是一个非常非常让人振奋的消息,让我们具有一些独立开发者梦想的伙伴们不仅仅是梦想!
一、Scut特点
多协议多协议:支持Http / WebSocket/ Socket脚本化:支持C# / Python /Lua脚本开发多平台:Windows / Linux/ Mac平台多数据库:MSSQL、Mysql及NoSql兼容多平台、也支持cocos2Dx,unity3d,falsh等主流的游戏开发引擎,支持逻辑层脚本语言开发,而且还支持热更新方式部署,是一款非常值得好好研究的.NET开原服务器引擎,作为.NET开发爱好者,有啥理由不喜爱上她呢?!既然Scut好处这么多,或许有人会问性能怎么样呢?这里我也借用一下官方的测试报告来说明。
二、Scut性能
服务器采用低配置,为避免瓶颈在客户测试机,客户测试机采用高配置。
服务器
虚拟机配置如下:
l CPU:4核
l 内存:2G
l 系统:Windows Server 2008 r2
测试机
客户端配置如下:
l CPU:8核
l 内存:8G
l 工具:VS2013
测试方式
使用单台客户机,用户数并发100,无思考时间的方式压测。
测试报告
· 服务器CPU占用范围20-50%;
· 负载测试TPS达到1213/s,平均响应时间6.8ms,实体服务器上TPS还会有上升;
· 单服在线人数课支撑5-10万人;
注:由于单台客户机瓶颈,服务器CPU未跑满。
测试效果图
服务器CPU占用:
负载TPS:
当然这些只是官方的测试数据,我也调查过在上海有一家公司目前三个大型项目服务器就是采用的Scut,并且长期在招scut游戏服务器开发工程师,韩国有一家公司服务器也是采用的scut,还有珠海那边一家公司也是,所以作为个人开发者或者是中小型游戏公司而言,选择scut是一个不错的选择。
三、Scut内置丰富的案例
可能我觉得最好的案例就是斗地主的案例了,所以我也自己亲自搭建好环境,就能直接将斗地主给跑起来了,下面是截图
还有其他十几个案例,我觉得作为一个客户端程序,能有这种免费开源的而且提供这么多案例的游戏服务器,并且提供了大量的文档教程,让一些新手非常容易上手,我觉得真的非常感谢无私的Scut团队,之所以现在游戏公司用这个不多,可能也有一个原因是这个引擎团队比较低调,我们一直无法调查到他们的背景,但现在我所了解的有一些公司已经把大型的商业项目选择这个游戏服务器引擎,足以证明它是值得我们好好研究和学习的。
四、环境搭建步骤
· 安装IIS,Win8上安装跟Win7上稍有区别,Win7上是中文Internet信息服务,Win8上直接叫英文了,要注意一下,具体安装步骤可以参考Win8 IIS安装 ,安装之后再浏览器里面输入localhost能出现默认的IIS页面则说明安装成功!
· 上面一条的补充,设置应用程序池->DefaultAppPool->v4.0经典,确保IIS可以正常启动。
· 将Scut源码中Scut->Source->Tools->release拷贝到IIS C盘IIS目录C:inetpubwwwroot下
· 修改本地默认域名解析,C:WindowsSystem32driversetchosts修改ip对应的默认域名,127.0.0.1 www.dingxiaowei.com ,这样在浏览器里面输入这个域名就能解析到本地的127.0.0.1
效果如下:
· 安装mysql和navicat for mysql,scut支持mssql和mysql,这里我演示的是musql,具体安装自行搜索
· 导入scut数据到本地mysql,导入数据表文件C:UsersdingDesktopstudyWorkASP.NETScutSourceToolsContractToolsdbmysql
· 再次刷新网页www.dingxiaowei.com ,会发现出现如图4的协议管理工具
· 在管理工具上点击新建项目,添加协议,添加版本号等等
· 打开vs,新建一个类库,然后将C:UsersdingDesktopstudyWorkASP.NETScutRelease6.7.9.8Console这里面的工程都拷贝到你新建的工程中,前提要运行一下install. bat生成一些必要的dll类库文件。
· 将Script文件夹和NLog.config、GameServer.exe.config文件包含在项目中,并且添加引用
· 查看一下Script/CsScript/Action/Action1000.cs文件的命名空间和引用空间,并修改对应的协议网站上的命名空间和引用
· 查看网站上自己添加的协议号并且在工程Script/CsScript/Action目录添加上对应协议号的类,然后将网站上的脚本拷贝过来,我这边是Action100.cs
· 在原来的Action1000.cs添加如下代码
[C#] 纯文本查看 复制代码
public override bool GetUrlElement()
{
if(httpGet.GetString("UserName", ref UserName)
&& httpGet.GetInt("Score", ref Score))
{
return true;
}
return false;
}
public override bool TakeAction()
{
var cache = newShareCacheStruct();
var ranking = cache.Find(m=> m.UserName == UserName);
if (ranking == null)
{
var user =new GameUser() { UserId = (int)cache.GetNextNo(), NickName = UserName};
newPersonalCacheStruct().Add(user);
ranking = newUserRanking();
ranking.UserID= user.UserId;
ranking.UserName = UserName;
ranking.Score= Score;
cache.Add(ranking);
}
else
{
ranking.UserName = UserName;
ranking.Score= Score;
}
return true;
}
· 服务器设置为.NET Framework4.5.1,调试选择当前目录下的GameServer,并且工作目录页选择当前目录C:UsersdingDesktopDotaServerHelloWorldTestHelloWorldTest
· 启动RedisServer,然后启动服务器端,直到显示Server has started successfully!Server is listening...表明连接成功
启动redis
启动游戏服务器
· 服务器端就算OK,接下来是客户端,新建一个unity客户端,然后将scut的服务器端sdk拷贝过来,路径是:C:UsersdingDesktopstudyWorkASP.NETScutSDKUnity3dAssets,将里面所有的脚本都放在unity的客户端中C:UsersdingDesktopstudyWorkASP.NETScutSDKUnity3dAssets
· 测试连接和断开连接
断开连接
关于Scut原理性或者更深入的项目介绍我们下一篇再学习,多多提意见大家一起交流进步!