Scut】的更多相关文章

Scut快速开发(2) Python脚本开发 1   开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) 进入控制面板,程序和功能 b)        SQL Server2005 c)        VS2010开发工具 d)        Python2.6(ScutGame官网下载IronPython2.6.1 RC1 for .NET 4.0插件) 工具 a)        协议工具(目录Source\Tools\Contra…
起初是看见官方例子里天界行的项目使用了WebService想试一下.用来做充值回调,后来发现由于版本更新已经弃用了 问了下管理员,由于天界行直接从iis服务端移植过来所以还保留了Webservice的代码.而控制台版本基于HttpListener不支持Webservice 我后来尝试scut+wcf也不行,似乎会把wcf代码给动态编译造成失败. 如果需要主动调用scut服务器有两种办法,一个是用remote(scut服务端互相调用), 还有一个是重写Dispatcher,实现对get/post参…
1. 上线后的大并发问题: var sem = new Semaphore(_accepts, _accepts); while (true) { sem.WaitOne(); #pragma warning disable 4014 _listener.GetContextAsync().ContinueWith(async (t) => { try { sem.Release(); var ctx = await t; await ProcessListenerContext(ctx, th…
姑且记录一下,以防未来出现bug回来看看今天改了哪些. 原 Scut 账服是应用于 渠道频道 的账号服务器,每天会发放大量的游客账号,它有一个"自动将已经被注册了一段时间的游客账号再重新推送给其他申请游客账号的人"的机制. 首先需要将这个机制予以屏蔽. 在注册请求时,校验MD5值,从 HttpRequest.Url.Query 中取出的被 DES加密 过的密码串 与 HttpRequest.Url.OriginalString 中对应的密码串不同,导致MD5校验失败. 直接解析  Ht…
整体通服的架构图如下: 整体思路: 尽量将公共的业务逻辑分拆到单个业务服务器: 公共业务RDB读写分离,提高IO并发量: 角色简要信息.角色战斗信息修改后将ID压入修改队列,简要信息每3分钟通知同步一次redis,战斗信息每10分钟通知同步一次redis: 单公共业务服务器,是以单机架构还是分布式架构? 方法一:采用单物理机构型,部署Scut,在对内存数据进行修改时加互斥锁,而且要考虑多线程操作时,向redis写缓存队列插入写操作的乱序问题: Scut 支持 ModifyLock 对数据进行原子…
直接利用 Scut 提供的服务器管理工具进行服务器管理. 教程:https://github.com/ScutGame/Scut/wiki/DirServer. 几个注意点: 下载的数据库导入bat是 UTF8 编码格式的,DOS执行会乱码,将其另存为 ANSI 格式编码的再执行: 新的站点需要开新的端口: 整个服务器列表站点的管理是以网页指令+数据库的模式来管理的: 游戏服务器内需要增加一个线程,定时更新分服列表数据库内本服的状态信息: 请求服务器列表与服务器状态是以 Scut 的 Actio…
开始以Scut搭建服务器框架: 1. 初始目录结构: libs 存放 scut 的引擎文件: release 存放 src 输出的文件: src 存放各子工程源文件: 2. Install.bat:目的是将 libs 里 scut 的引擎文件复制到各工程上. @echo off xcopy /y .\libs\6.7.10.0\*.* .\src\AccountServer\ ECHO Install Ok & PAUSE 3. 将 6.7.9.10 的引擎库文件复制到 libs. 4. 将 M…
Scut 在启动时有一个自动根据代码中数据类型检查数据库字段的功能,要如何使用呢? 脚本引擎动态加载 ModelAssembly: ScriptEngine.cs - InitScriptRuntimeScope: EntitySchemaSet.LoadAssembly(scope.ModelAssembly); EntitySchemaSet.cs - LoadAssembly: ).ToList(); foreach (var type in types) { InitSchema(typ…
在大致过了一遍Scut的底层结构(其实只是对各个组件有了一个初步印象而已),现在开始尝试搭建“口袋天界”的Scut服务端. 1. 设置外部启动项 项目属性 -- 调试 -- 启动外部程序 -- 项目根目录下的 GameServer.exe: 2. 正常安装环境后启动server,Db无法连接 通过官方文档确认 GameServer.exe.config 中的数据库连接配置,使用的是“MySqlDataProvider”,而我安装的是MSSQL,所以配置上要换成“SqlDataProvider”.…
Scut 的缓存管理看起来还是蛮复杂的.   redis 本身就有内存缓存+持久化的作用,Scut还是自己封装了一层内存缓存+Redis缓存+持久化. . 这是一个缩略版本的结构图. 1. 上半部分是通用的缓存池结构,用来存放各类缓存数据. 第一层Dictionary是按大类区分:Entity_{0}.Personal_(0),type.name 等:   第二层Dictionary则是进一步细分,比如同样一个type下的 type.name +"UserID": 2. 下半部分则是应…
核心文件是:RedisConnectionPool.cs 对象池类的通用泛型封装:ObjectPoolWithExpire<T> 1. 主要变量 private static ICacheSerializer _serializer; //redis 存储内容的序列化器 private static RedisPoolSetting _setting; //redus 他.应遵循的配置 private static ConcurrentDictionary<string, ObjectP…
Scut 可以执行 C#.Python.Lua 三种类型的脚步,Scut 是如何加载并传递参数的呢? 首先值得注意的是:Scut 在编译时就会将逻辑层脚本源码复制到bin/Script的目录下. 1. ScriptRuntimeDomain.ScriptRuntimeScope.ScriptDomainContext public abstract class ScriptBaseScope : IDisposable { protected readonly ScriptSettupInfo…
想使用 Scut 做的是一个短连接项目,所以先直接看 GameWebSocketHost 了. 先来看下 GameWebSocketHost 的成员: protected bool EnableHttp; public IActionDispatcher ActionDispatcher; private EnvironmentSetting _setting; private SocketListener socketListener; 由之前的分析可知:SocketListener 搞定了监…
大致浏览了一遍,Scut 的网络模型采用的是 SAEA 模型, 它是 .NET Framework 3.5 开始支持的一种支持高性能 Socket 通信的实现. 通过分析 Scut 的套接字监听控制,就能大致明白它是如何使用 SAEA 架构的. 1. 套接字缓冲区内存管理器 先来看下 Scut 对套接字缓冲区的内存管理: class BufferManager { int capacity; byte[] bufferBlock; Stack<int> freeIndexPool; int c…
看第一个解析API: private void ParseData(byte[] data) { var paramBytes = SplitBuffer(data); RawParam = _encoding.GetString(paramBytes); ParseParamString(RawParam); } 再看如何分隔数据包: private byte[] SplitBuffer(byte[] data) { int paramIndex = MathUtils.IndexOf(dat…
先上一段代码: public EnvironmentSetting() { var appServer = GetServerSection(); var protocol = GetProtocolSection(); var cacheSection = GetCacheSection(); var scriptSection = GetScriptSection(); CacheGlobalPeriod = cacheSection.ShareExpirePeriod; CacheUser…
1. 配置节 ConfigSection private List<ConfigNode> _configNodes; public class ConfigNode { public ConfigNode() { } public ConfigNode(string key, string value) { Key = key; Value = value; } public string Key { get; set; } public string Value { get; set; }…
前段时间都在用 IIS+WCF+Redis+MSSQL 的框架做服务器,前段时间看到了 Scut 的开源框架,整个架构还是蛮干净整洁的... 今天抓来跑一跑. 按照教程安装好所有的环境,版本是6.7.9.11. 设置好 GameServer.exe 作为启动项后,报错: 在 GameServer 的配置文件中加入片段: <runtime> <!-- WARNING: will load assemblies from remote locations as fully trusted!…
Scut提供Unity3d Sdk包.便利的高速发展和Scut游戏server对接: 看Unity3d示为以下的比率: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets文件夹下的TestScene.unity项目文件,选中Main Camera.将TestGUI.cs文件拖动到Inspector窗体的Script,如图: 点击执行.例如以下:   文件夹层次说明 1)       Net层:封装Http与Socket请求操作,以及网络协议的数据解析和请求參数的…
Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1        开发环境 需要安装的软件 a)        消息队列 b)        数据库,Sql2005以上版本 c)        VS2010开发工具(.Net Framework 4.0以上) 2        代码框架 项目划分三层:实体层,组件层,业务逻辑层(脚本层):模型层主要是数据实体映射,自定义缓存结构:组件层主要负责实现中层层扩展功能:业务逻辑层主要负责实现游戏功能: 2.1     数据库创…
原生的Scut引擎是采用redis来做数据缓存层,引擎在以异步的方式(时间可配置,默认100ms)实现数据同步.为了提高redis的可扩展性.高可用性,把redis换成codis,因为codis有部分redis语法不支持,遂将suct底层代码不支持的语法给改造了. Scut版本为:6.7.0.373 版本下载 名次注解 Scut游戏引擎介绍 Scut是一个开源.免费.稳定.快速开发的游戏服务器引擎,帮助开发人员快速开发出自己的游戏应用,力求做最好的游戏开源引擎,让网游开发和单机一样简单. 适用于…
协议生成器需要放在IIS里才能正常使用.具体目录在:Scut\Source\Tools\ContractTools\release 关于具体细节看这篇:https://github.com/ScutGame/Scut/wiki/ContractTools 并且要配置数据库,在Scut\Source\Tools\ContractTools\db目录运行批处理 请先尝试手动登陆SQL Server账号,如果登陆不成功,看这篇SQL server账号无法登陆 然后点击项目按钮会出现增加项目的面板,如果…
SCUT是一款基于C#且开源的游戏服务端框架,并且有一定的上线项目.最近正在入门中... 1.安装 去官网可以直接下载安装版:http://www.scutgame.com/ 源代码建议OSC China:http://git.oschina.net/scutgame/Scut 因为源码包里有许多工具和附带文档,推荐学习SCUT的朋友两个包都下载. 需要安装.Net4.5.1,推荐直接装VS2013,都有了 默认是Redis内存NoSQL数据库 - SQL数据库.没有接触过Redis的朋友可以看…
1     开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) b)        数据库,Sql2005以上版本 c)        VS2010开发工具(.Net Framework 4.0以上) d)        Python2.6(ScutGame官网下载IronPython2.6.1 RC1 for .NET 4.0插件) 工具 a)        协议工具(目录Source\Tools\ContractTools) 2 …
1.如果点击协议配置工具左上角的项目按钮没反应,说明数据库没有正确配置. 2.数据库创建脚本运行如果乱码,把utf-8改成ansi 3.如果ContractDB不存在就自行创建数据库. 4.使用sql server初始化,用户sa创建失败.请检查是否开启了sa账号登陆(登陆-已启用) 5.此外还需要开启c盘windows/temp路径的读写权限等等.具体看scut官方文档 6.还有一种情况,sql server数据库sa账号的密码不是123也会有问题,重新把密码设成123试试…
1.刚打开redis和服务端,测试时发现明显延时 刚开始会同步数据比较卡,需要进行一次操作才会同步.这个问题暂时没去研究 2.Server failed to start error:The model script compile error 模型里引用到了业务层的命名空间可能导致这个问题.并且包括构造函数,不能用业务层的东西 3.scut日志文件找不到 可以去(Debug/Release)的bin目录下找 4.引用第三方dll报脚本编译错误 后来在log里发现貌似是动态编译,Time:201…
Scut快速开发(3) 1     开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) b)        数据库,Sql2005以上版本 c)        VS2010开发工具(.Net Framework 4.0以上) d)        Python2.6(ScutGame官网下载IronPython2.6.1 RC1 for .NET 4.0插件) 工具 a)        协议工具(目录Source\Tools\Contr…
https://scut.online/p/223 给定两个数N,M,构造M个在[0,80000]以内的互不相同的数使之异或和为N. 首先特判一下M<=2的两个简单情况,还有坑爹的-1! 然后想办法构造. 好像从哪里得到的启发只要把最后一次调整交给最后的数字就可以了. 但是这次调整可能会和前面生成的数字重复,这怎么搞呢? 先命令前面从1开始连续生成M-2个数字. 然后现在的异或和绝对是在10000以内的某个数,或许是0.是0那就麻烦了,就要避免,避免的方法就是最后一次生成的时候多搞一个1.那么现…
https://scut.online/p/354 跟多项式一点关系都没有. 注意到其实两个多项式在1处求值,那么就是他们的系数加起来. 列一列发现系数就是n以内两两求gcd的值,还自动把0去掉了. 那么就是 \(\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{n}gcd(i^2,j^2)\) 这种情况就要枚举g但是为了方便我们也是枚举g而不是g平方 \(\sum\limits_{g=1}^{n}g^2\sum\limits_{i=1}^{n}\sum\limit…
https://scut.online/p/337 这个东西是个阶梯状的.那么可以考虑存两棵树,一棵树是阶梯的,另一棵树的平的,随便一减就是需要的阶梯. 优化之后貌似速度比树状数组还惊人. #include<bits/stdc++.h> using namespace std; typedef long long ll; inline int read() { int x=0; int f=0; char c; do { c=getchar(); if(c=='-') f=1; } while…