- 博客(141)
- 资源 (11)
- 收藏
- 关注
原创 游戏服务器广播消息的优化
游戏服务器里经常有大量的消息需要广播 特别是同屏战斗的时候 释放技能 伤害输出 位置移动 hp变化。想起了之前做第一款游戏的优化,那时候还不知道做地图分线 ,这样可以显著降低同屏用户数,但是缺点也很大,玩家感觉不够热闹。只能硬着头皮做着千人同屏的优化,没想到那时候就是人生的巅峰,因为那个时候确实导量很厉害,很容易几千人在线,现在基本只有爆款游戏才能遇到这种情况了。一开始测试的时候,发现...
2019-09-03 01:31:06
1120
原创 Netty 同一个端口支持Tcp和 websocket
在Netty 实战群里讨论了下能否一个端口支持tcp和websocket . 既然websocket是从http升级到websocket的 Netty能判断http的话 理论上能判断出是http的话,那就应该可以的。服务器监听端口,在最开始添加一个decode 这里判断是tcp还是http 来选择添加对应的编解码器。既然理论上行的通 ,那现在就开始验证下吧。服务器端添加一个SelectDeco...
2018-09-29 11:44:30
6554
8
原创 window bat 版本发布
1:用maven 构建项目jar和copy lib包 2:用bat copy部分其他资源文件<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
2018-06-06 10:01:15
707
原创 idea Gradle 编译可执行jar
之前项目都是ant编译的 感觉ant比较老而且难懂 就选择gradle来学习下。先参考网上资料 安装好gradle的环境 。idea 可以直接选择创建一个简单的gradle项目 自动生成 build.gradle 文件。 上面是项目的一个简单的结构,目标是把引用的jar打包到lib文件夹里 。生成可执行的jarapply plugin: 'java'apply plugin: '...
2018-05-23 20:34:40
2757
原创 Netty 添加 websocket 支持
首先还是在Netty官网找到demo的链接,Netty官网websocket demo 然后就是开始copy 对应的类 拿来测试了。然后就开始分析添加对应的handler了。WebSocketServerInitializer 里配置了@Override public void initChannel(SocketChannel ch) throws Exception {...
2018-05-17 15:08:58
898
原创 Netty nio 数据流入流出分析
要分析流程最直接就是通过源码断点调试分析了,我这里就直接在handler里的channelRead0里抛出异常,查看下执行的堆栈。java.lang.Exception: xxxxxxxxxxxxxxxxxxxxxxxx at com.test.MsgHandler.channelRead0(MsgHandler.java:26) at com.test.MsgHandler.cha
2017-09-29 11:37:09
363
原创 游戏服务器压力测试
游戏项目上线之前,一般需要对项目做个压力测试,从中可以评估项目的性能瓶颈,做出针对性的优化,这样就需要设计一个压力测试工具了。这里主要针对RPG游戏单线程还是多线程。游戏业务逻辑还是要单线程,这样上层业务逻辑不用考虑并发问题,降低编码复杂 度。如果整体只用一个线程支撑2000机器人跑压力测试,如果没有寻路,没有其他一些耗时的操作,还是可 以支撑的。如果整体只用一个线程跑多个机器人,那么可以
2017-09-06 11:52:05
11194
1
原创 java 问题分析工具
一款在线分析代码BUG的利器 https://github.com/oldmanpushcart/greys-anatomy 性能分析 使用jprofile 内存泄漏可以使用mat 线上调用脚本代码使用beanshell 热修复方法级别代码 instrument
2017-07-12 20:06:02
375
原创 游戏上线了,聊聊遇到的坑
游戏上线前,就先要做下压力测试。所以需要写一套自己的客户端程序模拟真实玩家的操作。一般由于项目时间的限制 基本上都只会模拟主要的功能,比如做任务,按照主线任务一直做下去即可。由于做的游戏基本都是RPG,所以模拟玩家一直做主线任务即可。玩家走路的速度 释放技能的间隔 做任务的速度 尽量模拟真实的玩家,这样就能真实模拟出玩家对服务器的压力,这样的测试才最有意义和针对的方案优化。RPG游戏核心的AOI没有
2017-06-16 01:35:23
574
原创 java游戏服务器之网络层Netty 之ChannelPipeline
ChannelPipeline具体的功能在代码里有具体的详细说明 * <h3>Creation of a pipeline</h3> * * Each channel has its own pipeline and it is created automatically when a new channel is created. * * <h3>How an event flows i
2017-05-26 00:37:40
610
原创 java游戏服务器之数据层
先说下缓存数据层,通常在游戏服务器中经常会使用到数据缓存。如果是进程内的缓存,直接点就是HashMap ,List,一般会选择guava,Ehcache这些缓存框架。因为有很多数据都只需要暂时性缓存,不然会浪费太多的内存,而且容易造成内存泄漏选择guava的应该会多些 毕竟很多功能可以方便操作缓存,具体可以看下这个链接学习下google cache。进程外的缓存一般使用redis了,还可以利用
2017-05-14 21:01:35
971
原创 java游戏服务器之网络层Netty 之EventLoop
java游戏服务器网络层越来越流行netty,毕竟版本更新快,支持新的特性,更多的功能支持。相比下来mina慢了好多。现在就开始分析下对应的代码吧。估计这段时间要花的时间有点长
2017-04-27 00:17:09
2369
原创 Java游戏服务器代码热更新
一般碰到这个问题首先想到的解决方案都是考虑new 一个classLoader来加载新的类,这样的解决方式有什么优点和缺点呢。使用ClassLoader的方式加载类就涉及到一些需要知道的知识点。双亲委托模型确保了一个类只会被一个类加载器加载一次,所以要更新旧的类就需要new一个新的类加载器。新的类可以添加字段添加方法还有很多强大的功能。如果仅仅只是一个简单的小程序是可以考虑的,毕竟牵涉到的模块不是很
2017-04-25 09:09:34
8702
原创 JVM相关知识
根据<<深入理解Java虚拟机>>整理 JVM结构:运行时数据区和本地方法区 运行时数据区包括下面: 程序计数器:当前线程执行字节码的行号指示器,根据计数器执行对应的代码 Java 虚拟机栈:也是线程私有 每个方法都会创建一个栈帧,每一个方法调用完成就是在虚拟机栈从一个入栈到出栈的过程 本地方法栈:服务于本地方
2017-02-07 11:48:48
276
原创 Map类的分析
LinkedHashMap 继承HashMap 所以存储,获取数据还是hashmap 只不过使用链表标记了头和尾,所以可以从头和尾开始遍历TreeMap 是有序的,存储使用了红黑树结构,使用的时候对象需要实现Comparator接口。
2017-01-16 18:58:47
266
原创 HashTable源码分析
public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key
2017-01-13 20:23:50
260
原创 HashSet源码分析
public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance
2017-01-13 20:16:48
312
原创 HashMap源码分析
1:hashcode的计算 不同数据类型 hashcode的计算方法是不一样的,归根结底是换算成一个整数便于存储和查找数据 2: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /** * Implements Map.put and r
2017-01-13 20:04:13
338
原创 关乎心情
年纪大了,想的太多,总是会失眠。 关于爱情:还是喜欢会代码的妹子,对于结果不知道如何,但是尽心吧。 关于生活:回来都好晚了,好累。下份不想这么累了,为了钱可以考虑下, 还是要经常锻炼下,身体比较瘦。 关于事业:该有的都有了,存点钱干点事。
2016-10-26 02:25:01
322
原创 游戏服务器框架设计
好久没写东西了,慢慢开始整理点东西吧。 服务器架构网上有好多讨论了。这里只讨论一个游戏服务器设计的一些东西1. 网络层框架 一般现在都是用mina netty ,因 netty比mina提供现成的东西比较多,开发起来简单,更新比较快,越来越多的人开始用netty了。2. 逻辑层框架 一个消息从网络层传送过来,逻辑层需要做处理。这样就涉及到一个问题,逻辑并发处理问
2016-05-16 15:16:21
1389
原创 beanshell 线上修复BUG
有时服务器上线了 但是有些代码因为程序原因可能导致没有执行 需要主动调用执行下 或者为了排查线上问题 主动获取某个方法或者变量的返回值 可以使用脚本来做线上的修复处理 javascript 也是可以的 但是编写脚本 有些时候总有字段类型转换的问题 beanshell是java脚本 写起来方便很多 不过 使用这些脚本修复的一个基础是要有一个容器存放所有的对象 如果使用了spr
2016-04-16 17:04:18
742
原创 canvas 图片 文字 合成
canvas可以合成文字 图片 这样可以本地预览图片了直接加载本地的图片:先用 引用,然后获取src 赋值到Image对象src的属性值var starSelectImg = $('#starSelect').val(); $('#starImg').attr('src',starSelectImg); var starImg = new Image(); starImg
2015-12-28 18:43:09
4289
1
转载 js 一张图说明了
http://ww2.sinaimg.cn/large/663aa05agw1ewzm76rahij21k23mhqn8.jpg
2015-10-14 08:45:40
452
转载 geohash:用字符串实现附近地点搜索
http://blog.charlee.li/geohash-intro/geohash:用字符串实现附近地点搜索这个不错
2015-09-04 14:59:10
615
转载 json-jackson多子类继承的反序列化
http://wangxinchun.iteye.com/blog/2195210?utm_source=tuicool后面可能会用的上的
2015-08-25 10:09:07
5377
原创 easyui datagrid-detailview.js 子数据表显示BUG
正常情况下是正常的,如果这个数据表又添加单元格编辑功能就会出现子数据表有些时候不显示 渲染行的时候没有渲染子数据表但收缩和展开显示的数据时正常的。在onClickCell函数里if (endEditing()){ $('#dataGrid').datagrid('selectRow', index) .datagrid('editCell', {index:i
2015-03-12 11:38:30
4114
转载 Netty版本升级血泪史之线程篇
http://www.infoq.com/cn/articles/netty-version-upgrade-history-thread-part
2015-02-10 09:46:12
2122
原创 java 百度 登录
1:模拟浏览器登录百度前,先把浏览器的所有cookie都清除掉,这样看得比较清楚。2:使用chrome或者火狐浏览器都可以 .打开控制台 ,下面以chrome浏览器来介绍。https://passport.baidu.com/v2/?login 点击控制台的url后面就差不多是分析每个url请求的参数的数据是在哪里来的了。最麻烦的一步就是密码的加密。需要
2014-12-04 18:34:18
4191
原创 unity 记事本
Vector3.magnitudeReturns the length of this vector (Read Only).The length of the vector is square root of (x*x+y*y+z*z).
2014-11-12 18:13:56
1133
原创 mysql 导入大的sql文件
在mysqld下面加入配置max_allowed_packet=500Mwait_timeout=288000interactive_timeout = 288000如果we
2014-05-11 13:16:20
581
原创 java 程序的性能分析
有些时候会分析下程序的性能问题,仅根据个人的一些实践来说下。java web的程序的性能 一般都是针对访问多点的地方做个时间标记,模拟压测的打印log也是比较容易发现程序的一些问题的。下面主要介绍java应用程序的性能分析一些方法。1:使用jdk自带的jvisualvm 在window下的cmd直接启动就可以了。xp下因为盘文件格式的问题,可能导致无法访问,需要修改一些配置的路径
2014-03-29 22:18:50
830
原创 java btrace
对于线上项目的分析 有时需要线上的环境的时候 可以使用btrace来查找一些特殊的bughttp://blog.youkuaiyun.com/changewang/article/details/12057139先下载btrace 然后开始写btrace的脚本 根据https://kenai.com/projects/btrace/pages/UserGuide#btrace_a
2014-03-22 22:43:48
620
原创 java gc的log分析
最近没什么事,主要是看到程序GC较快 所以想看下程序有没有问题,网上的一篇文章http://book.51cto.com/art/201306/399236.htm在程序启动的时候加上 几个参数-verbose:gc -Xloggc:d:/gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps就会在控制台打印gc的log 上面的链接
2014-03-17 17:32:24
8794
原创 java 缓冲区
基本上都有4个属性1:容量(Capacity) 代表能存储多少:2:上界(Limit)缓冲区不能读或者不能写的位置3:位置(Position)这个position会随着读或者写而改变位置4:mark(Mark)调用mark()来设置mark的位置四个属性的关系如下0
2014-03-02 21:04:22
1511
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人