- 博客(293)
- 资源 (10)
- 收藏
- 关注

原创 游戏跨服架构进化之路
1.背景虽然游戏市场竞争激烈,产品格局变动较大,但游戏产业一直处于稳步增长阶段,无论是在端游,页游,手游还是已经初露端倪的H5游戏。可以预见,游戏类型中,MMOARPG游戏仍然会是引领市场的主流趋势,贡献着大部分流水,市场上也仍然在不断涌现精品。研发团队对MMO游戏的探索从来未间断过,从付费模式的改变,到题材多元化,次时代的视觉效果,更成熟的玩法及数值体系,本文主要针对跨服玩法上的探索和...
2017-03-02 14:46:41
14331
19
原创 VUE使用总结
适用于 Linux 的 Windows 子系统没有已安装的分发版。可以通过访问 Microsoft Store 来安装分发版: https://aka.ms/wslstore。下载官方安装包,https://yarnpkg.com/zh-Hans/docs/install。yarn -v # 出现对应版本号即代表安装成功。版本查看命令:winver。
2022-10-24 19:35:58
226
原创 Zlib和Zstd 性能对比评测
Zstandard 是facebook厂商提供的一种高压缩率的实时压缩算法,他在压缩比和压缩速度上做了很好的平衡,同时还提供高速的解码器,针对小数据,也提供了一种叫做字典压缩算法,从样本中可以创建出字典集合数据,Zstandard库以BSD协议方式开源。该算法是由Facebook的Yann Collet开发的一个无损数据压缩算法。Zstandard在设计上与DEFLATE(.zip、gzip)算法有着差不多的压缩比,但有更高的压缩和解压缩速度。...
2022-07-29 17:46:09
618
原创 在服务器端如何用JNI实现 NavMesh寻路
我们已经讲到的在服务器端使用 Easy3dNav来进行 NavMesh 来做寻路,但性能上能否更快一点呢?众所周知,C++ 版本的性能向来比JAVA版本要出色,所以我们尝试用JAVA调用JNI native 接口来提升寻路的性能。............
2022-07-13 21:22:54
529
原创 JNI全流程实例使用总结
为了更好的获得一些比较独立的模块的性能,比如视频模块,寻路模块,通过对C++ 接口的封装,通过JNI技术对它进行跨语言调用。那什么是JNI呢?JNI (Java Native Interface,Java本地接口)是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用/或库,也可以被其他程序调用。 本地程序一般是用其它语言(C、C++或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序。.....................
2022-07-12 21:31:45
723
1
原创 3D寻路系统NavMesh-服务端篇
上一节讲到的客户端使用Unity 自带的 NavMesh 来做寻路。然而,怪物的刷新、移动,和AI是由服务器负责的,怪物的寻路是由服务器控制的,或者像SLG,大地图寻路在玩家离线的情况下要继续寻路,这必须要服务器来主导寻路。...............
2022-07-12 00:38:07
866
1
原创 3D寻路系统NavMesh-客户端篇
2D寻路我们一般以A*寻路为主,那么,3D游戏世界呢,NavMesh(导航网格) 是3D游戏世界中主动寻路的一种技术,如果你想让游戏人物能自动绕开障碍物到达目的地.那你就来学习下。
2022-07-10 23:40:32
1028
转载 Unity 从各个点理解协程
什么是协同程序?什么是协程?unity协程是一个能够暂停协程执行,暂停后立即返回主函数,执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的函数。函数体全部执行完成,协程结束。由于中断指令的出现,使得可以将一个函数分割到多个帧里去执行。
2022-05-14 17:18:36
191
原创 windows下不重启电脑如何能更新环境变量
修改完成环境变量后,进入cmd命令提示符,输入:set PATH=C: 关闭cmd窗口。再次打开cmd窗口,输入:echo %PATH%C:\Users\DELL>where javaD:\Program Files\Java\TencentKona-8.0.4\bin\java.exe发现还真变了可以发现“我的电脑”->“属性”->“高级”->“环境变量”中设置的 PATH 值已经生效。总结:”输入:set PATH=C: ,关闭cmd窗口。再次打开cmd窗口
2022-03-16 15:42:24
3304
1
原创 静态代码自动扫描p3c的使用
当一家公司上了一定的规模,项目越来越多,代码也越来越庞大,然后就是各种五花八门的代码格式、代码规范,通过主程们code review 耗时耗力,很多主程也缺少主观能动性和精力去cover code review这事项,如果有东西能自动化去检查团队成员的编码规范,这样就可以大大的提高代码质量,也可以让核心人员从code review 中解脱出来,本文提到的P3C-PMD就是这种神器。
2022-02-07 16:31:21
1863
原创 链路跟踪Jaeger使用总结
Jaeger是一款广受欢迎的开源分布式链路跟踪系统,兼容OpenTracing API,且已加入CNCF开源组织。主要功能是聚合来自各个异构系统的实时监控数据。对一些常用的框架通过插件可以达到无侵入式跟踪,比如Apache HttpClient,Elasticsearch,JDBC,Kafka,Memcached,Mongo,OkHttp,Redis,Spring Boot,Spring Cloud,要通过Jaeger将Java应用数据上报至链路追踪控制台,首先需要完成埋点工作。
2022-02-07 15:25:56
5839
原创 如何用 APT(Annotation Processing Tool)自动生成代码
我们很多人都写过代码自动生成的工具,比如用python结合moko模板引擎,或者java 结合freemarker模板引擎,protoc 等,实现解析策划数据类,proto协议类,或者数据库层的实体类。大大节省了我们开发的时间,让我们可以懒得光明正大。那么,有没有办法当你写好协议后,只要一保存编译,相关的协议接收和发送类的接口就自动实现了呢?答案是有的。注解处理器是(Annotation Processor)是javac的一个工具,用来在编译时扫描和编译,处理注解并生成锁期望的代码,提高生产效率。
2022-02-05 21:23:25
617
原创 Java基准测试工具JMH使用
JMH,即Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具API。JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 方法层面上的 benchmark,精度可以精确到微秒级。本文主要介绍了性能基准测试工具 JMH,它可以通过一些功能来规避由 JVM 中的 JIT 或者其他优化对性能测试造成的影响。
2022-02-05 17:52:30
8720
原创 Prometheus的使用总结
Prometheus 是一套开源的系统监控报警框架。它受启发于 Google 的 Brogmon 监控系统,由工作在 SoundCloud 的前 google 员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation(CNCF)基金会的项目,成为受欢迎度仅次于 Kubernetes 的项目。2017 年底发布了基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配
2021-12-29 12:11:21
1853
原创 吐槽下Nacos服务发现
1.注销实例的API或者SDK(deregisterInstance),会导致该条记录消失,如果只是modifyinstance,会导致永远驻留在数据中2.游戏区做了迁移或者IP漂移的话,老的脏数据还是会在服务器列表里,没法通过zoneid去覆盖,只能通过人工去把该节点下线3.目前为了减少线程占用,dir和game的底层用的是nacos API,基于http client封装,但为了实时同步(subscribe),dir服又同时用了nacos SDK4.用Nacos SDK 的话,进程会新增10几个线
2021-11-26 10:57:33
3232
原创 k8s及常用指令使用总结
Kubernetes (K8S) 是由Google设计的用于自动化部署、大规模可伸缩、管理容器化应用程序的开源的容器编排引擎,目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
2021-10-26 17:31:50
211
原创 我眼中的OpenTracing
分布式链路跟踪最先由 Google在 Dapper论文中提出的一套链路追踪的 API 规范,支持多种编程语言,与平台无关、与厂商无关,使得开发人员能够方便的添加(或更换)链路跟踪系统的实现,虽然OpenTracing不是一个标准规范,但现在大多数链路跟踪系统都在尽量兼容OpenTracing。目前符合这API标准的就有 SkyWalking,Jaeger,Zipkin,Open Telemetry,Pinpoint、CAT等等
2021-10-22 15:47:42
473
原创 VirtualThread Pin的处理总结
Pin的状态指的是VirtualThread在freeze时无法让出Carrier Thread(协程执行时挂载的物理线程)。主要有两种情况下会导致Pin:VirtualThread的调用栈包含JNI frame。因为JNI调用的实现是C++代码,可以做的事情非常多,例如它可以保存当前Carrier Thread的Thread ID,如果这时切换出去,那么下一次执行时,如果另一个Carrier Thread来执行这个协程,将会产生逻辑错误(Carrier Thread的ID不一致);VirtualThr
2021-09-10 21:02:40
110
原创 LOG4J2-MDC-全链路跟踪等功能研究
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,内部是基于threadLocal实现,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当开启isThreadContextMapInheritable属性后,当前线程的子线程会继承其父线程中的 MDC 的内容。当需要记录日志时,日志框架会自动从 MDC中获取所需
2021-08-10 14:54:38
1697
原创 谈谈对Angular,Vue,React 的认识
Vue和React两个JavaScript框架都是当下比较受欢迎的。不同点:Angular (74.8K star)是基于 TypeScript 的 Javascript 框架。由 Google 进行开发和维护,它被描述为“超级厉害的 JavaScript MVW 框架”。React (172K star) 被描述为 “用于构建用户界面的 JavaScript 库”,是Facebook创建的JavaScript UI框架,它支撑着包括Instagram在内的大多数Facebook网站。React与当时
2021-07-22 14:32:01
211
1
原创 Docker使用总结
Docker 是一个能够把开发的应用程序自动部署到容器的开源引擎。也就是说Docker跟Vmware等虚拟机软件相比,它是开源的。一个原生的Linux容器格式,Docker中称为libcontainerLinux内核的命名空间(namespace),用于隔离文件系统、进程和网络文件系统隔离,进程隔离,网络隔离,资源隔离与分组,写时复制,交互式shell...
2021-07-07 15:40:32
204
原创 酷炫的IDEA启动图黑客主题来了
2021年4月份的某一天,IDEA提示我版本更新,我更新完,在等待移动的过程中,我期待有个酷炫的画面出来,就像幻视绚丽登场。期待中的画面:实际等来的画面:眼花缭乱的让我仿佛感觉到期待的幻视穿上了东北花棉袄妖娆而来。让点泪奔~~~忍了他好几个月了,端午节闲来没事,今天终于有点时间换上了大师级启动图。先上图,那么,我们如何去替换呢?1.先退出正在运行的 IDEA, 避免出现冲突2.找到文件 idea 安装路径/lib/resources.jarmacOS IntelliJ IDEA.a
2021-06-14 13:42:26
584
2
原创 Tcaplus使用总结
一、Tcaplus是什么?游戏数据库 TcaplusDB 是专为游戏设计的 NoSQL 分布式数据存储服务,支持 Protobuf 接口访问,Tcaplus 将 Cache 与硬盘结合,追求高性能的同时,也节省成本,很好地支持全区全服和分区分服,并针对游戏爆发增长和长尾运维特点提供不停机扩缩容、备份容灾、快速回档等全套解决方案,安全可信赖。目前应用于《王者荣耀》、《穿越火线》、《火影忍者》等数百款流行游戏。二、使用步骤特别要注意的是,在购买时,连接协议里选择TDR,这样就支持xml表定义了。如何定义
2021-06-11 17:40:24
599
4
原创 《万国觉醒》之游戏战报FreeMarker模板引擎实现
这两天在玩《万国觉醒》,看了下战报,每一回合伤害,技能,buf明细都写的很详尽,如果自己去实现,该怎么做呢?想想,只要有个记录战斗明细的对象+模板引擎,一整合,需要的结果就出来了,就拿接口很丰富的freemarker练手。好,我们先来学习下这个模板引擎的基础知识。
2021-06-09 10:39:44
922
原创 上标下标汇总
0到9小数字符号:上标:º ¹ ² ³ ⁴⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ′ ½下标:₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎
2021-04-22 18:11:11
1988
原创 Nacos使用总结
官网 :http://nacos.io下载地址 本文下载的为2.0.0版本:https://github.com/alibaba/nacos/releasesLinux/Unix/Mac启动命令(standalone代表着单机模式运行,非集群模式):sh startup.sh -m standalone打开页面http://127.0.0.1:8848/nacos/index.html[root@VM-0-15-centos logs]# jps -l30601 sun
2021-04-08 11:21:29
6651
2
原创 游戏服务器设计-脚本系统设计
本文对脚本引擎beanshell 和groovy做了技术选型,给出了优劣对比结果,并设计了脚本系统UI界面。游戏项目中都会遇到以下的一些需求:1.从内存里查询数据2.修复个别玩家的异常数据如何能最快捷的方式去实现,目前有两种脚本引擎可以选择:beanshell 和groovy.
2021-03-17 15:59:18
409
原创 markdown语法使用总结
1.上标### 2. 数据结构和算法* 寻路算法 * NavMesh * A<sup>*</sup>* 推荐算法 * Collaborative Filtering * Factor Analysis
2021-03-11 19:24:01
104
2
原创 谈谈用统一网关gate的利与弊
在架构设计中,在网关这块,很多公司喜欢用统一网关,特别是电子商务,金融,团购等等日常生活中会用到的互联网产品,但多服多区模式下的游戏是否也适用统一网关呢?那么,统一网关带来的好处是什么呢?1.安全性,所有终端请求都需要经过网关层,再分发给各种微服务,这样,如果我们保证了网关层的安全性,高可用性(HA),负载均衡(LB),那么,很多业务的运行就不会直接暴露在公网上。2.节省资源,IP段的资源(特别是IPV4段目前越来越少的现状)和带宽资源(针对一台云主机分配一定带宽的购买方式,而非共享
2021-02-08 16:14:17
978
1
原创 Google Guava EventBus使用
Guava是Google开源的一个Java基础类库,它在Google内部被广泛使用。Guava提供了很多功能模块比如:集合、并发库、缓存等,EventBus是其中的一个module,本篇主要讲一下EventBus的使用。简单介绍EventBus:核心类,代表了一个事件总线。Publish事件也由它发起。 AsyncEventBus:异步事件总线,在分发事件的时候,将其压入一个全局队列的异步分发模式。 Subscriber:对某个事件的处理器抽象,封装了事件的订阅者以及处理器,并负责事件处理。
2021-01-30 19:11:41
613
原创 在linux系统上搭建egret编译环境
为了能在服务器自动化编译打包H5项目,需要在测试服搭建一套环境系统:CentOS release 6.9 (Final)安装nodejswget https://nodejs.org/download/release/v9.11.2/node-v9.11.2-linux-x64.tar.gz解压到/usr/local/下,在/etc/profile.d/extend.sh下配置环境变量export NODE_HOME=/usr/local/node-9.11.2export PATH
2021-01-23 20:54:04
276
原创 Redis主从配置总结
IP:192.168.1.100主节点 6379从节点 6380从6380节点里要加slaveof 192.168.1.100 6379把主节点停掉,6380从节点输入slaveof no one主节点恢复后,现将6379设置为从节点,6380的数据也就恢复过来了,6379的节点如下操作slaveof 192.168.1.100 63806...
2020-12-18 18:21:44
88
原创 selenium使用总结
web自动化测试第6步:模拟鼠标操作(ActionChains)selenium webdriver 实现Canvas画布自动化测试ChromeDriver设置有密码的代理(Java版本)解决Selenium 调用IEDriverServer打开IE浏览器用 canvas 的 getImageData 做点有趣的事https://docs.opencv.org/java/...
2020-12-18 18:19:55
139
原创 腾讯云如何挂载数据盘
执行以下命令,对 “/dev/vdb” 裸设备直接创建文件系统格式。 mkfs -t <文件系统格式> /dev/vdb 不同文件系统支持的分区大小不同,请根据实际需求合理选择文件系统。以设置文件系统为EXT4为例: mkfs -t ext4 /dev/vdb 注意: 格式化需要等待一段时间,请观察系统运行状态,不要退出。 执行以下命令,新建挂载点。 mkdir <挂载点> 以新建挂载点/data为例: mkdir /data ...
2020-11-08 17:02:40
1083
原创 源码系列-LongAdder和AtomicLong对比
相当于一个AtomicLong数组,初始化时,初始化大小为2的数组,并初始化相对应位置的一个元素Cell,当每次去尝试获取时,根据当前线程获得的随机值threadLocalRandom取模(大小为cell的数组容量)获得索引值,然后回去找相应位置的元素,找不到则插入新的cell, 然后进行CAS操作(比如compareAndSwapLong),与AtomicLong原理相同,操作成功则结束,操作失败,会尝试扩容为原先cell数组大小的两倍,然后重新初始化要更新的索引值(threadLocalRando...
2020-10-29 19:51:09
155
原创 RocketMQ使用总结
Topic可以理解为在rocketMq体系当中作为一个逻辑消息组织形式,一般情况下一类业务消息会申请一个topic来实现业务之间隔离。Topic是一个逻辑上的概念,实际上在每个broker上以queue的形式保存,也就是说每个topic在broker上会划分成几个逻辑队列,每个逻辑队列保存一部分消息数据,但是保存的消息数据实际上不是真正的消息数据,而是指向commit log的消息索引。...
2020-08-28 16:13:30
265
protobuf-java-3.3.0.jar
2017-10-13
精简版JRE7 64位 (6MB)
2013-09-29
MINA NIO 高性能异步并发网络通讯框架
2008-07-23
commons-io-1.4.jar
2008-05-16
jakarta-oro-2.0.8.jar
2008-05-16
commons-net-1.4.1.jar
2008-05-16
commons-io-1.4.jar等
2008-05-16
vs code 环境下VUE vite mock api文件能设置断点调试嘛?
2022-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人