- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 golang pprof使用
通过交互终端使用# 下载 cpu profile,默认从当前开始收集 30s 的 cpu 使用情况,需要等待 30sgo tool pprof http://localhost:8888/debug/pprof/profile# wait 120sgo tool pprof http://localhost:8888/debug/pprof/profile?seconds=120 # 下载 heap profilego tool pprof http://localhost:8888/
2021-09-15 15:24:43
511
原创 游戏服务器总纲
游戏AI一般通过状态机(FSM),分层状态机(HFSM)、行为树(BT)等技术实现文章介绍FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别使用行为树(Behavior Tree)实现游戏AI技能系统文章介绍如何实现一个强大的MMO技能系统——技能视野一般使用AOI算法文章介绍MMORPG游戏中AOI视野算法解析分线由于同一场景承载的人数有限,为了限制玩家集中在一个场景以及提升单服人数上限,mmo框架一般会使用分线策略:同一个场景分为多个实例消息设计模块
2021-06-28 13:13:58
249
原创 golang语言优缺点 以及 性能知识点
优点并发简单、效率高函数可以返回多个参数垃圾回收(相比c/c++,java、c#都有这个优势)缺点没有继承,只有组合,无法写出多态类型功能没有异常处理不支持泛型,导致很多接口得写多遍原生数据结构太简单,没有sort map 、set、list等不支持参数重载函数访问权限太简单,public和private两种...
2020-04-02 11:38:46
796
原创 golang下极致性能socket开发
优化记录1. SendMessage时,一定是调用方将message转换为[]byte数据序列,避免在其他线程转换时引发并发问题2. socket写数据优化。socket写数据核心流程:message序列化->写入socket,有些socket库,存在重复拷贝的问题,基于核心流程,减少不必要的拷贝和内存分配,进行如下优化:每个连接定义一个write_buffer,用来减少tcp报文数...
2020-03-09 18:28:23
2361
原创 goroutine锁性能分析
背景goroutine是go语言并发利器,但是假如有goroutine A 和goroutine B需要同步执行某段程序,没有有效的措施,利用sync.Mutex加锁可以实现。但是sync.Mutex是锁线程的,不是锁协程,可能多个协程都在同一个线程下执行逻辑,协程A获取sync.Mutex锁后,这个线程的其他协程就要切换到别的线程执行逻辑了(go的底层做了处理,这些都是猜测的),这就会带来一定...
2020-02-03 23:05:50
715
1
原创 游戏服务器设计(golang)
背景使用goroutine 轻轻松松高并发使用nats互连所有server进程,所有消息通过nats中转可扩展:升级nats集群,实现全区全服,动态负载gated处理客户端连接、交互的服务器每一个session分配一个goroutine可以部署多个进程,客户端随机连接其中一个(或者加一个动态负载,控制客户端连接哪个gated)与游戏项目无关连接加一个握手策略,防止ddos攻...
2020-01-10 14:54:32
907
原创 c# Task.Delay 和 HashedWheelTimer 性能对比
背景定时或者延时,在游戏中有很广泛的使用。测试一下c#原生的Task.Delay和HashedWheelTimer性能对比对比结果其中HashedWheelTimer初始化为new HashedWheelTimer(tickDuration: TimeSpan.FromMilliseconds(50) , ticksPerWheel: 100000 ...
2019-12-11 20:06:20
1400
原创 c# Task知识点
task使用知识点总结对于自定义可await的对象waitObj(继承自INotifyCompletion),在使用await waitObj时,如果IsCompleted是true,将会自动继续执行后续逻辑
2019-12-11 15:13:27
258
原创 task粒度的锁性能分析
背景扩展了一个task粒度的锁,对比一下不同实现方式的效率task级别锁的实现(传统)简单来说,就是在循环等待锁释放task级别锁的实现(改进版)充分利用async/await 异步等待逻辑实现高效task锁两种锁测试对比可以看见改进方式效率更高方式task数量cpu占比耗时(毫秒)传统10000%-1%21383传统30000%-1%...
2019-12-10 17:47:05
324
原创 c# 模拟c++ friend 权限
背景假如,有一些接口只想内部调用,不想外部代码调用,仅用internal是不够的。但C#中没有类似于friend的权限,只能根据Internal权限来模拟类似于c++的friend权限。实现所有需要内部调用的接口权限声明为internal所有需要互相调用内部接口的函数封装到同一个class,利用c#的partial关键字。如下://file1public sealed parti...
2019-11-28 13:45:03
497
原创 游戏服务器设计(C#)简单版
背景充分利用c#中的task机制,设计高并发,无锁(针对业务逻辑)的服务器架构gateserver处理客户端连接、交互的服务器永久性设计,与游戏项目无关,无需新代码维护gameserver逻辑分类,每一类逻辑分配一个task单独处理每个玩家分配一个独立的task (e.g 5000个玩家,需要5000个task)每个帮派分配一个独立的task ( e.g 300个帮派,需要...
2019-11-26 10:31:22
2660
原创 C# Task 与 锁
锁一般都是锁线程,例如互斥锁Monitor等多个task可能共用一个线程假如一个task锁住线程,其他共用线程的task会同样等待吗?答案是:不会经过测试得到以下结论:task执行的所在线程会发生变化,所以不用线程锁会锁住同一个线程的其他task,因为其他task会被转换到别的线程继续执行...
2019-11-25 19:17:13
3037
原创 SOCKET 封包 和 解包
目标soecet收发数据封包和解包背景一般都有固定长度、固定后缀的做法,但都花里胡哨,都有各自的问题。本文采用固定长度+ 数据buffer模式,其中最简单的是用4字节int来表示长度。但这还不够,很多情况下长度可能一个byte就够用了,浪费了3个字节,本文采用动态字节数来存储长度详细方案首先读取一个字节,也就8个bit,a b c d e f g h判断a是否为0,如果是,则长度...
2019-11-21 19:20:20
1757
原创 visual studio 2019安装路径选择
共享组件、工具和SDK路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup下的SharedInstallationPath下载缓存路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup下的CachePath如果不存在则新建...
2019-09-16 15:07:13
30858
5
原创 Rocksdb 学习研究
一些特性NewIterator似乎是创建了一个镜像,在使用过程中删除或者新增数据,不会影响到iterator遍历到的数据Transaction(txn),GET会获取到最新的数据和txn中写入的未提交的新数据...
2019-09-09 17:50:06
223
原创 游戏服务器设计
线程模型(基于c#)多个线程对应同一个数据队列每个线程对应一个数据队列,可以让一类操作全部放到同一个线程单线程gateserver客户端所有交互都与gateserver进行可以做成永久,与具体游戏项目无关dbserver处理数据存储和读取使用rocksdb进行封装采用事务操作:要么全部成功,要么全部撤销每次操作前:先对所有表按顺序加锁,保证不会死锁;损失部分效率,保...
2019-08-30 17:26:13
648
原创 Unity Shader 实现半透明效果
背景想要实现如下效果:主角可以遮挡背景,背景遮挡主角时候半透明混合研究了一周,shader知识了解从无到稍稍入门,终于解决了,记录一下实现方案。实现方法使用 Blend One OneMinusSrcAlpha指令,也就是SrcColor + DstColor * (1 - SrcAlpha),假设A和B重叠,先渲染A,然后渲染B,指令在B的杀的人里,那么SrcColor是B的颜色,Ds...
2019-07-04 16:48:51
15609
1
原创 Unity Spine知识点总结
控制spine动画透明度获取到skeleton,或者skeletonData之后,可以更改骨架skeletonAnimation.Skeleton.A的alpha浮点值2.使用Spine / Skeleton Tint色调着色器并控制材质属性_Color“Tint Color”,控制透明度...
2019-07-01 11:05:19
3576
1
原创 Unity Sprite Mask 学习总结
知识点Sprite Mask Alpha Cutoff说明 引用cutoff alpha的功能是当alpha值小于某个值的时候,就把这个像素点设置成完全透明。用来实现某些效果,比如腐烂消失等...
2019-06-28 11:31:28
1388
原创 Unity Tilemap Collider 总结
基本情况单独创建一个专门制作collider的tilemap,方便统一控制制作各种collider形状的tile(瓦片)添加脚本控制,在运行时隐藏这些collider模型using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Tilemaps;...
2019-06-26 17:13:50
6317
原创 Unity 3D环境下等角投影摄像机角度
背景需要让3d地图表现出等角投影状态,主要是通过设置摄像机旋转角度方式实现参考说明参考说明主要步骤设置camera的位置x = -10, y = 15, z – 10设置camera的角度x = 30, y = 45, z= 0步骤优化上述操作可得到x z平面的等角投影,但是想要xy平面的等角投影,需要继续如下操作创建一个空的GameObject将camera和一个立方体放...
2019-06-21 17:33:51
1976
原创 Unity & Spine 换装:打包apk后,换装不显示问题
背景spine换武器时,在unity编辑器运行是正常的;打包成apk后,在手机上操作换装显示异常解决方案参考 Equips, Customization, and Mix-and-Match主要是将图片(当时使用的png格式)Mesh Type设置为Full Rect、勾选"Read/Write Enabled"打包方式(仅供参考),压缩方式是随便勾选的...
2019-06-14 18:06:20
1143
原创 Android SDK Tools 命令行攻略
背景最新版本的sdk tools 不像原来有一个独立的sdk manager界面来管理,而是内嵌到android studio里面。但是,由于GreadWall隔离,导致通过android studio下载sdk异常困难(尝试了无数方式下载sdk,最终还是失败)。所以直接采用sdk tools 命令行方式更新sdk参考sdk manager命令行步骤说明下载sdk-tools-wind...
2019-06-14 14:59:17
1772
原创 Unity Custom Font 创建图片字体
参考文章详细步骤说明新的字体图片BattleTextFont.png,放置于Resources目录下,如图选中图片,将Sprite Mode设置为Multiple点击Sprite Editor 将各个字切割好创建工具脚本CostomFont.cs,自动生成字体文件,右键菜单会出现CreateMyFontSprite选项using UnityEngine;using Unity...
2019-04-23 19:03:47
1418
原创 Unity cube 不同面设置不同颜色
新增shader控制Shader "Custom/Vertrix"{ Properties{ } SubShader{ Pass { ColorMaterial AmbientAndDiffuse } }}创建材质Create > Material将新的材质命名为CubeMaterial将材质的shader更改为上一步所创建的Custom/Ve...
2019-04-08 15:35:36
10319
原创 Unity Shader 之图片菱形切割
将一个方形图片切割成菱形 在Sprites/Default的shader基础上进行扩展 分别将需要切割的四个角的透明度设置为0,就不会显示了 如下图,切割前是原图,使用shader后将不会显示四个角Shader "Custom/Rhombus"{ Properties { [PerRendererData] _MainTex("Sprite ...
2019-03-19 20:57:00
1348
原创 xlua和lua
lua_rawgeti(lua_State *L, int index, int key) 和 lua_rawseti(lua_State *L, int index, int key) index表示table在栈中的位置,key表示元素在table中的位置。假设t为正数 那么调用lua_rawgeti(L,t,key)等价于 lua_pushnumber...
2019-03-05 17:29:00
1810
原创 c#开发记录
VS安装本地nuget包下载指定nuget包,如xxx.nupkgTools->Options->Nuget Package Manager->Package Sources,添加本地库,如图所示Tools->Nuget Package Manager->Package Manager Console,执行安装命令Insta...
2018-11-22 21:34:00
118
原创 jenkins部署使用记录
安装jenkins下载jenkins.war,本次使用的2.152版本配置环境,下载jdk-8u191-linux-x64.tar.gz,解压至路径/usr/java/下#修改~/.bash_profile,添加如下配置JAVA_HOME=/usr/java/jdk1.8.0_191CLASSPATH=.:$JAVA_HOME/lib/PATH=$J...
2018-11-21 01:16:00
189
原创 阿里云服务器部署记录
修改终端显示vim /etc/bashrc在其后添加export PS1="[\u@localhost ~]$ "然后执行source /etc/bashrc添加用户并设置ssh key登录#添加用户useradd -d /export/dev -m devcd /export/devmkdir .sshc...
2018-11-02 17:51:00
199
原创 c++编译问题
1.error LNK1112c++ 链接问题LNK1112(stackoverflow)特别是cmake生产工程,从x86复制一份配置到x64项目,项目->属性->配置属性->库管理->命令行,其中附加选项自动带上了x86,删除即可...
2018-06-12 20:55:00
135
原创 unity小功能
1.获取切割后的图2.加载图片(Texture)并转为spriteTexture2D aa = (Texture2D)Resources.Load("FullScreenfild/ic_heng_touxiangda") as Texture2D; Sprite kk = Sprite.Create(aa, new Rect(0, 0, aa.width, aa.height),...
2018-03-06 01:09:00
191
原创 unity小功能2
1.获取切割后的图2.加载图片(Texture)并转为spriteTexture2D aa = (Texture2D)Resources.Load("FullScreenfild/ic_heng_touxiangda") as Texture2D; Sprite kk = Sprite.Create(aa, new Rect(0, 0, aa.width, aa.height),...
2018-03-03 01:13:00
107
原创 valgrind相关
valgrind安装方法安装,prefix选项是为了非root用户的安装./configure --prefix=$HOME/valgrindmakemake install配置step 1:修改~/.bash_profile export PATH=$HOME/valgrind/bin:$PATHst...
2017-07-05 10:46:00
126
原创 Log4J日志配置详解
http://www.cnblogs.com/ITtangtang/p/3926665.htmlhttp://www.cnblogs.com/ITEagle/archive/2010/04/23/1718365.htmlhttp://blog.youkuaiyun.com/anlina_1984/article/details/5313023log4j分级别打印日志+通过socket将日志传输至日...
2017-07-03 17:00:00
167
原创 netty学习记录
NioEventLoopGroup线程数量默认为:处理器数量*2 DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt( "io.netty.eventLoopThreads", NettyRuntime.availableProces...
2017-05-26 00:24:00
118
unity游戏拖尾X-WeaponTrail 1.3.1.rar
2019-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人