设计之美
文章平均质量分 62
逐风
这个作者很懒,什么都没留下…
展开
-
基于MongoDB REST API 以及XMPP的游戏数据同步架构
导言在开发轻量游戏的前提下,传统数据显得较为笨重又不够灵活,所以NoSQL一般作为首选,而在开放了REST API之后,可以直接解放后端人员的数据交换的请求,该公开的数据都已经在数据库里保存,自己去获取即可,剩下就是一个简单的消息丢该订阅系统了。XMPP的pubsub协议,正好确保了这个问题。修改者,去修改数据,发起pub消息。订阅者获得订阅消息,再根据自我需求决定,是否重新去获取数据,这就完成了一原创 2017-05-05 14:54:04 · 827 阅读 · 0 评论 -
分布式异步消息框架构建笔记4——分布式消息路由
上一篇实现了消息的自动路由,这边写了一个小测试,大家可以猜一下运行输出结果是什么? public class RouterTest { public static void DoRouterTest() { var contextA = Context.Creat("A"); var contextB原创 2014-12-10 12:01:54 · 1627 阅读 · 0 评论 -
分布式异步消息框架构建笔记 1—— 设想
前几天在查看关于 Actor模式的一些资料,包括Erlang在游戏中一些资料,虽然本人不会Erlang但是稍微看了下编写方式.觉得还是有可借鉴的地方的.因为实在不熟悉不枉加评论了.这里说下自己的一些理解.从这几年Erlang和函数式编程的崛起,引发OOP编程的一些不足,但是OOP并不妨碍获得相关的优点,只不过需要一些有效的框架和规范支持。首先这里有几个简单的问题:1.OOP方式面临多线原创 2014-12-05 16:38:57 · 991 阅读 · 0 评论 -
分布式异步消息框架构建笔记5——如何避开并行编程中的数据共享陷阱
任何多线程/并行/分布式都会面临一个问题,“数据状态共享"。有经验的开发者会说,要想正确有效的避开避开状态共享,那么就应该别用任何状态共享。虽然不得不说,这是一个不错的建议,但是没有状态共享,你需要如何才能知道非本地数据的状态?也许你会说使用消息,使用消息来处理,那么我们丑陋的回调金字塔应该叠的更高了。不得不说这是一个解决办法,但是为了保持状态不被修改,那么我们还得在远程申请一个写原创 2014-12-11 11:31:19 · 1067 阅读 · 0 评论 -
面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描述了一个关于差异数据在开发过程中的一个优点,这里来演示另外一个特点:单机开发之无缝切换到C/S模式一般C/S模式都面临一个问题:就是开发过程中的调试难题,因为涉及到客户端和服务端相关方法,如果由某个人来编写那么也是一个简单的事情.如果由2个人编写,会带来一些平台上的区别以及编码的区别.简单的说,如果我们在开发时完全的避开C/S,然后经由某个机制,可以直接让模块跑到服务器原创 2014-12-22 14:01:27 · 1907 阅读 · 0 评论 -
多人即时战斗游戏服务端系列[1]--90坦克Online网络版详解
一款多人在线即时战斗游戏的服务端设计文档整理,补充,备忘.原创 2014-11-05 15:35:57 · 4999 阅读 · 4 评论 -
Unity3d 游戏汉化之IL注入文本替换--木石世纪
最近下了个游戏叫木石世纪(Timber and Stone),沙盒游戏类,看着还不错.搜了下游戏资料,有人求汉化但是由于是小众游戏,没人出汉化.看了眼是Unity3d的,既然是.Net的,只要资源不是在资源包里,应该都还是蛮简单的.刚开始做了个字符串替换,发现有些地方还是比较麻烦,还不如拿UnityEngine里面的GUI函数开刀,也就是有了这么一次简单的哦汉化过程.首先写个简单的类用原创 2014-11-17 15:47:05 · 8995 阅读 · 3 评论 -
面对对象之差异化的网络数据交互方式
面对对象之差异化的网络数据交互方式传统开发C/S还是B/S应用都会经过这几个步骤1.编写定义服务端实体类,一般还需要映射到数据库2.编写定义消息类3.编写定义客户端实体类,一般服务端实体类会比客户端多一点,当然也可以和服务端公用.4.编写应用逻辑5.赋值返回数据到消息类,然后进行返回这里来讲解一种简单的模式进行优化和解放这些繁琐的体力活.原创 2014-11-14 14:43:32 · 2858 阅读 · 0 评论 -
多人即时战斗游戏服务端系列[3]--日志类及Config类以及Excel生成类
日志类,Config类,以及Excel to cs 相关辅助类.原创 2014-11-13 13:42:18 · 1613 阅读 · 0 评论 -
分布式异步消息框架构建笔记2——yield机制及单线程多任务系统
上一篇这边进行了一些结构上的设想,主要的核心内容就是消息和单线程实现.这篇就介绍下如何通过C#中yield关键字,达到单线程执行多任务实现.首先了解下yield的使用.. public static IEnumerable YieldTest() { int x = 0; x++;原创 2014-12-08 12:57:17 · 1486 阅读 · 0 评论 -
分布式异步消息框架构建笔记3 —— 自动消息路由
这个系列慢慢变成先设想后完成的模式了,上篇我们测试了以Yield当多任务处理.楼主写了个小Demo也完成了类似功能,并且支持中途等待,直接等到完成回调后,继续处理下一阶段.这个功能可以完成类似逻辑事件流,比如C需要等待A,B完成后再执行,而且写法也比较简单.直接上代码: //创建事件,把Handle丢入Yield队列, //执行原创 2014-12-09 11:59:04 · 1091 阅读 · 0 评论 -
OOP游戏开发随笔--开发历史小故事
最近乱七八糟的写了一堆东西,大家凑合看.这里是一个简单的开发历史小故事...1.开始我们直接用SQL拼接完成这类事情.无非是不断的读表,写表,返回数据2.然后采用了标准三层结构/ORM框架,把读表/写表变为读取/修改Model对象,保存Model对象,返回数据3.接着,发现读取比较费资源,于是乎我们把Model缓存起来,大部分时间就变为修改Model/保存Model.返回数据4原创 2014-12-29 16:35:53 · 1351 阅读 · 0 评论 -
Themis 序列化协议说明 V1.1[开源]
Themis 序列化协议说明 V1.1协议特点:无需预定义的二进制格式,可添加任意Key/Value 类Json风格,又可使用固定结构来进一步压缩交换空间和编码效率。二进制协议为Zigzag,大大缩小所占用空间,完全兼容Json协议,开发期Json带来可读性和解析便利性,后续可通过预定义描述,对传输体积进行压缩,并且提供ToJson接口,在客户端最低成本接入新协议,序列化协原创 2017-03-17 09:42:22 · 469 阅读 · 0 评论 -
一种新型的游戏服务器架构CDDE
1.传统的数据模式以整个实体数据读出,处理完成后,整体数据再写入。而在游戏行业,对同一数据的操作频繁性,使得传统处理方式更容易的暴露所在的瓶颈,所有的业务逻辑都压在数据库的负载上,导致可用性以及响应速度的下降。 为了解决这类问题,常规的做法就是在数据库之前防止一层缓存层,减少对同一数据的读取操作,以缓解对资源的竞争。这样处理之后,数据库的权重能力下降,因为缓存中的数据可能更新,那么数据库中原创 2016-02-26 13:49:10 · 1013 阅读 · 0 评论 -
.Net 与 Javascript 混合编程系列(如何穿透.net 和 js 的边界)
上一篇研究了如何做到CS和JS互相透明访问的设想,经过一些实践,这里做出了一个小DEMO。这里有第一个演示类: public class TestCSClass { public TestCSClass() { } //如果可被重写则重载 public virtual object Met原创 2015-07-02 15:55:08 · 2225 阅读 · 0 评论 -
类dota战斗机制记录——基本系统
名称解释:1.战斗场景,负责管理场景中所有物体,也是系统中事件的入口2.物体,包括所有战斗物体和投掷物,英雄怪物,守卫3.投掷物,投掷出去的弹道4.守卫,继承与英雄,用于实现特殊技能实现的隐藏/非隐藏物体5.碰撞器,必须由投掷物携带,并且可携带多个,用于作用携带的buff6.buff,包含所有的效果,从伤害/位移/debuff/dot/都归此类7.事件循环树,updat原创 2015-06-12 14:12:33 · 984 阅读 · 0 评论 -
类dota战斗机制记录——守卫系统以及连环冰冻实现
守卫系统1.守卫是一个普通的英雄2.守卫继承与释放英雄的属性数据3.守卫用于执行比较复杂的逻辑4.守卫不一定拥有普通英雄的AI,但是可作为释放技能的载体。5.守卫有一定的持续时间使用对象举例:1.治疗守卫(剑圣)2.陷阱(圣堂刺客)3.弹射类技能,连环霜冻(巫妖),闪电链(宙斯)4.重生(肉山盾)连环霜冻1.在目标身上创造一个守卫2.守卫携带技能,连环霜冻单次伤害。3.守卫携带原创 2015-06-12 14:56:24 · 857 阅读 · 0 评论 -
类dota战斗机制记录——u3d动画以及特效配合
英雄普通攻击过程:选择一个目标->触发前摇->播放前摇动画->等待前摇完成->释放投掷物->触发后摇->播放后摇动画->完成动画效果实现:分类:1.投掷物,一般丢出一个投掷,绘制一个弹道跟在投掷物上,投掷物销毁时,一般会在目标身上释放一个爆炸特效.2.定点型特效,无弹道过程,直接在目标身上作用一个特效.3.连线性,从发起方和被击中放使用一个特效连接,控制连接时间4.buff型,在目标对象添原创 2015-06-12 14:38:23 · 1307 阅读 · 0 评论 -
.Net 与 Javascript 混合编程系列
之前的文章有提到 edge 和 nodejs 交互,通过node的模块为C# 提供一些扩展,这个还是比较方便。这里说下为什么要使用js。1.SharpKit是一个用于在编译时将C#语言转换为JavaScript的工具。 从试用上来说还是比较强大的,基本上支持大部分语法。2.c# 虽然是比较强大的,但是在一些方面还是比较薄弱的,而且在一些平台上还有些限制。原创 2015-06-25 17:28:09 · 1332 阅读 · 0 评论 -
多人即时战斗游戏服务端系列[2]--90坦克Online游戏对象介绍以及渲染机制
多人即时战斗游戏服务端系列2,一个面对对象的游戏服务端对象设计,包括类图和一些机制介绍.原创 2014-11-13 12:58:33 · 2243 阅读 · 0 评论 -
大话快速开发——III 回归
1.简单的拥有反向缓存更新功能,意味着可以轻松扩容,虽然需要付出更多的CPU和内存2.编码开发更简单,无需关心修改,无论如何都仅拥有一次修改/或者不修改。3.获得基于异步写入的优秀响应性能,却没有延迟写入的一些缺陷。4.拥有即时写入优点,却更少的关心更新逻辑。原创 2014-02-13 21:19:15 · 901 阅读 · 0 评论 -
大话快速开发--II 进化
上一篇,还是在一年多前。为什么会有这篇续呢?因为笔者这边又进化了,找到了真正想要的开发模式。并且经过时间的检验,这种模式和架构是科学并合理的。 从上一篇可以看出,在试图解决C/S或者B/S中烦人的约定以及接口的问题,不断的用户交互以及在这些中间所涉及到的约定以及乱七八糟的维护问题。 上一篇的结构是这样: 拖几个控件做界面-> 访问桥接层初始化方法->初始化实体数据原创 2013-11-17 10:19:14 · 781 阅读 · 0 评论 -
大话快速开发--桥接层之代码生成器
看看上次写博客已经是近一年钱,CSDN虽然常逛,但是不怎么说话.如今有个小项目,涉及到一些所谓的高效开发,又需要为后期做准备.忽然有记录一下设计流程的想法,就在这里进行试着记录了.各位看客,有什么不同意的地方还请拍砖.(如果拍,请重拍...) 场景1: 首选是一个需求变动很大的小游戏项目B/S结构,涉及到大量的数值规则以及逻辑.开发初期,为了更好的控制游戏策划期的风险,采用了一个简单的原创 2012-07-17 11:08:58 · 2868 阅读 · 0 评论 -
C#丢弃Appdomain 之 动态dll替换
好久没写什么了,最近项目遇到一要求,为开发方便,需要wcf 服务能动态加载。这本不是什么难事,反射内存加载大家都会。 但是,如果遇到引用DLL?如何卸载被引用的程序集,基本上陷入困境。网上资料无非 appdomain能解决。但是,不算性能损失,调用方式原创 2011-09-14 09:44:11 · 5586 阅读 · 0 评论 -
设计之美——极限反射之包装器
又是一个睡不着的夜晚,当你知道由于自己误会了一个女孩而在手上多添加了一道伤痕的时候,我相信你也会和我一样。我很想告诉他我再也不会那样做了,我发誓!但是不忍吵醒她的美梦,只能来这里写几句,也许是记录吧。这里的blog写了一周,不知道为什么,发现自己开始有点喜欢这里了,每次总能怀着一种美好的心情来写一些东西,虽然总是乱七八糟的說一堆,但是至少自我感觉还好。虽然这个系统用起来那么不怎么感觉好,但是也原创 2008-04-30 06:09:00 · 733 阅读 · 0 评论 -
设计之美——反射加速
上一篇写了关于反射的一些速度测试,里面涉及到克隆建立和委托执行的效率,但是有评论表示說,完全偏离了反射的主题,“动态实例和动态调用”,其实不然,我所要说明的其实并不是說如何创建一个动态委托,并且重复执行,我所要表达的是,拥有一条优雅的路线达到我所希望的要求。 在上一篇中你可以看到这么一种情况,如果使用模板克隆,效率的提高还是相当明显的,这个大家都能找到办法解决,反射对象缓存已经用的相当原创 2008-04-28 20:34:00 · 892 阅读 · 0 评论 -
基于设计的配置脚本的高速开发(研究)
这是一篇想象中的东西,没有太多的代码给大家看,这里发表出来只是希望大家能给点意见或者讨论一下是否可行。也许我也许可以完成它。 我尝试以一种简单的模式来完成一次基于winform的产品开发,当然也就是简单的个人产品,还是拿原来开发的那个邮件群发软件来进行分析好了,那是个基于页面提交的邮件群发,提供注册,发信这样的简单的功能。但是我尝试把它开发成通用的结构,也就是意图使用一个基于网页配置文件原创 2008-04-27 22:28:00 · 666 阅读 · 0 评论 -
设计之美——命令模式(二)
也许你看过第一篇,也许没有,如果没有我推荐你看了继续看这个,因为这是接在那个下面的。这里将对上一篇进行完善,实现一个设想中他该那么工作的一组类。来看代码吧…… //CMDManager.cs /**//// /// 这里叫他命令管理器 /// 用于对命令对象的管理和传递 /// 设计之美——命令模式(二) /// 也许你看过第一篇,也许没有,原创 2008-04-25 19:18:00 · 732 阅读 · 0 评论 -
设计之美——命令模式
开篇,这里开了个blog 那么就要写点东西上去了,最进做了个东西需要一堆命令做脚本,但是实现不怎么满意,这里重新编写一下然后与大家分享,本来还有更多的废话的 :) 但是 CSDN 的blog 貌似不怎么可靠,直接没掉了 5555555555555 好几百个字呢,培我字来!!!好了,那些个也找不到心情写了,然后只好郁闷的直接上代码了,命令模式我也不多说了,大家就去看吧 。这里直接贴上代码了,原创 2008-04-24 20:24:00 · 762 阅读 · 0 评论 -
NodeJs与.net之edge
.net下,话说写起网络层来确实比较蛋疼。 NodeJS以其高性能的IO吞吐与便捷的异步开发著称。 如果把把.net与NodeJS结合会如何?以高性能的NodeJS Host +c#便捷开发=高性能便捷开发组合。 这时edge出现了,正好在于我需要的时候。 技术选型比较简单,NodeJS测试数据不用多说了,现在就是edge交互测试的问题了。 简单测试原创 2013-11-18 19:52:52 · 3246 阅读 · 2 评论 -
坑爹快速游戏开发系列-1
坑爹快速游戏开发系列,见过mvc模式,见过mvvc模式,见过cmmcv模式么?戳进来拍砖吧。原创 2013-11-11 09:04:40 · 1318 阅读 · 0 评论 -
玩转NodeJs之Clr JavaScript--之框架
上篇测试了Edge对于Clr的支持,于是开始构造如下的架构: 转换用的是SharpKit(商业软件),测试了基本转换,包括linq,反射,以及一些基本测试,还移植一个简单的小类库,基本上问题不大。于是就准备开始准备重构现用的架构。继续上图: 全程采用C#编写,会有部分Js代码用于绑定,理论上一个跨平台的框架。允许直接运行于C#,或者采用NodeJs独立运原创 2013-11-30 13:27:27 · 1485 阅读 · 0 评论 -
OpWeb——MySQL同步模块(2)
上一篇说了简单的MySQL同步模块,用于简单的查询。但是文件存储还有个弊端,如果你需要进行批量修改或处理的时候,处理文本是个比较头疼的问题。1.一不小心可能处理错了数据,使存档不可读取。2.从单目录文件上来说,存储规模不够大,而且备份需整个文件拷贝,也是比较浪费空间的。但是,文本在开发和测试期非常简单。1.测试人员无需文本进行相关修改和读取。2.快捷的管理,无需任何数据库方原创 2014-01-10 23:34:56 · 1089 阅读 · 0 评论 -
OpWeb——MySQL同步模块(1)
一直以来,我们的项目都是基于文本文件数据进行存储,我喜欢这种存储方式。首先,他比较简单,并且便于查看和修改,而且非常方便。我觉得唯一的麻烦就是如何管理这一堆用户数据。然而对于其他开发者来说,查询、统计、处理文本数据是个糟糕的事情,更倾向于SQL类存储。MongoDB是可以查询,但是如果能直接同步到MySQL是否会更顺利一些?刚开始计划是这样的:示例:玩家:{ OpId原创 2014-01-09 22:54:41 · 1152 阅读 · 0 评论 -
游戏开发模式进化(OpLog协议说明)—— OpWeb框架系列[1]
目前公司以开发网页游戏为主,这里就从游戏场景说起。场景描述: 游戏简化版是这样的,游戏分为养成和战斗,玩家通过不断的战斗获得战利品并升级自己,然后挑战更强力的BOSS,貌似一般游戏都这样!那么我们就有了2个场景,玩家面板和战斗面板。玩家面板有几个数据:玩家名字,当前金钱,当前等级,当前经验,装备武器,背包。战斗过程不说:战斗会玩家会获得经验和物品或金钱。传统的原创 2013-12-24 23:38:07 · 1696 阅读 · 0 评论 -
MVC模式数据流程图—— OpWeb框架系列[2]
OpWeb引擎遵守的是数据绑定监听,客户端仅关心Model和View的交互,服务端仅关心Model和操作的交互.简单的举例就是 比如你界面上绑定了一个Nick.操作流程为: 1.客户端绑定某个UI部件到Nick.(监听其改变,刷新下) 2.服务端接受修改Nick服务,修改Model的Nick到新值.完成,客户端无需关心何时修改,修改成什么样子,无需关心在什么地方修改原创 2013-12-25 14:27:41 · 1682 阅读 · 0 评论 -
OpWeb[0.0.3]--光速无服务端创建一个AJXA聊天程序
上一篇我们简单测试了如何快速构建一个聊天程序,虽然很简单很Demo.但是依然摆脱不了B/S的方式去开发. 现在OpWeb[0.0.3]版本给你带来了更令人兴奋的开发方式,全客户端模式.更快速,更便捷的开发模式. 废话不说,直接上index.html easy chat test原创 2013-12-24 14:34:45 · 1056 阅读 · 0 评论 -
[开源] OpWeb 框架 --快速高效的实时交互框架(更新至 0.0.4.0)
一个轻量高效的实时交互开发框架,用于开发实时Web App 或者 网络游戏。这是什么?这是一个Web在线对战射击游戏(MMOA)的开源版本,该游戏依然在运行中。原有平台为C#,现在我通过SharpKit把它移植到到了NodeJs平台!发现NodeJs给我带来更好的体验和想法,虽然有些地方很糟糕,但是这并不是问题。现在已经升级到0.0.3版本,虽然还不算成原创 2013-12-07 23:18:08 · 2116 阅读 · 0 评论 -
SharpKit 之移植 --I
今天试着移植公司的项目库, 首先是公用类库,包含配置库、日志库、以及序列化库,以及线程库, 测试了几个简单的功能, PS.反射性能不错,有点超过C#原生反射的样子。(不过对于其他手段,肯定慢了。。) 发现几个问题: 1.枚举支持不算很好 2.不支持Goto(虽然没怎么用) 3.需要为所有的类加上JsType,并指定File路径 包括所有依赖的类原创 2013-12-02 19:10:02 · 811 阅读 · 0 评论 -
设计之美——反射测试
由于反射的灵活性,总是尝试多使用用于减少代码的开支,但是凡事总是有代价的,反射的效率确实让人汗颜。有文章說测试效率底了250多倍,这个确实有点让人无法忍受了,但是今天在查关于C#函数指针的时候,却让我眼前一亮,事情总是有解决办法的,如果不失反射的灵活又拿回大部分效率,也许大家都会感兴趣的,这里我就来给大家一个测试。 开头的几个测试沿用了网上的几个小测试大家直接看代码原创 2008-04-28 03:31:00 · 1029 阅读 · 2 评论