自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 资源 (27)
  • 收藏
  • 关注

原创 使用redis实现延时消息发送功能

redis本身也有发布订阅的模式,但是如果想要实现例如rocketmq或者rabbitmq的延时任务功能要怎么做呢,目前比较流行的做法有两种,一种是使用sortedset数据模型,把超时时间设置为score,然后系统启动一个定时任务定时去检查score超时的key然后把key取出来,再进行下一阶段的任务;第二种方法就是利用redis本身的通知机制,当key到期的时候会进行通知,通过捕获通知的信息来实现延时通知的效果。本文使用第二种方式,并且通过注解和反射使得整体功能更具有扩展性和适用性。

2023-11-03 16:25:58 567

原创 手写可持久化的纯JDK缓存

近期笔者搞了一个极简springboot项目,不依赖mysql,redis,数据库用H2,Cache用Caffeine,其他缓存就自己写了一个可持久化的工具。开源的代码如下: https://github.com/EricLoveMia/simpleBoot 本篇文章主要讲述可持久化的缓存工具。

2019-08-14 11:27:40 2003

原创 整理收集的一些常用java工具类(http、加解密、编号生成、二维码、字符串、图片、JDBC...)

小弟最近开了一个新的项目,主要是总结各个项目中用到的工具类,目前放到github中,内容持续补充,各位大神可以多题建议,争取做到全网最全的工具类项目 主要包括:订单编号生成工具类、http及https请求工具类、格式化数字工具类、加解密工具类、布隆过滤器、redis工具类,截取部分工具类如下: IPUtilsimport or...

2019-08-01 15:42:21 2293 1

原创 面试集中营—ElasticSearch架构篇

1、支持多种数据类型。它可以处理非结构化、数值和地理信息等多种类型的数据;2、简单的RESTful API。ES提供了一个简单易用的RESTful API,使得它可以从任何编程语言中调用,降低了学习的曲线。3、近实时搜索。ES每隔1秒将数据存储至系统缓存中,使用倒排索引提高检索效率,使得搜索数据变得快速且高效。4、支持相关性搜索。它可以根据条件对搜索结果进行打分,提供了基于文档的全文检索能力。5、天然分布式存储。ES是分布式的,使用分片支持处理PB级的数据量,易于扩展,可部署在数百台服务器的集群中。

2024-04-26 11:21:23 546 1

原创 面试集中营—mysql架构相关

了解一个中间件一定要从架构开始,上来就背八股文那就没意思了。从下图可以看到Mysql的包括网络连接、服务、数据存储和系统文件(日志)四大部分。数据连接:客户端连接器(Client Connectors):提供与MySQL服务器建立的支持;服务:又包括了sql接口,sql解析器,查询优化器,缓存等模块,主要是把sql进行解析和处理;数据存储:主要是存储引擎,常用的就是MyISAM和InnoDB;

2024-04-23 10:34:14 996

原创 面试集中营—场景面试题A

第一步我们要首先确定是什么导致的消息积压,基本上三个原因线上消息积压第一步先看日志,是否在消费端出现了系统异常,系统异常有可能是磁盘满了,挂载盘故障了,网络不稳定或者有黑客入侵植入了其他程序侵占了系统资源等等。系统异常排除,就通过日志查看是否存在业务异常,是否有大量的报错信息,如果存在那么应该是代码的问题,此时就要快速修复问题,然后上线。如果不是代码的问题,那么就要考虑当前消费线程的执行时间是否过长,每次消费的时间太长也会造成消息的积压,通过各种工具可以检测到消费的时长,如果很长那么也需要优化代码。

2024-04-23 10:33:47 892

原创 面试集中营—AQS哪些事儿之ReentrantLock

AQS—AbstractQueuedSynchronizer是JDK工具包中的一个抽象类。在这个抽象类中,有几个属性和一个双向队列(FIFO)。是JUC并发包下的一个基类,那么我们熟知的ReentrantLock、CountDownLatch、信号量等等都是基于这个基类来实现的。

2024-04-22 15:08:23 1032

原创 面试集中营—AQS哪些事儿之CountDownLatch

AQS既可以用来实现互斥锁也可以用来实现共享锁,互斥锁确实可以用boolean来定义state的类型,但是共享锁需要多个线程持有一个锁资源,那么boolean就不适合了,state定义成int类型可以表示线程占用的数量。

2024-04-22 15:07:17 519

原创 面试题集中营—GC日志简析及频繁GC的调优

有两种方式查看GC日志,一种是动态命令行查看第二种就是在JVM参数中增加打印的参数,如下:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps 表示打印每次GC的日志以及GC发生的时间-Xloggc:gc.log 可以把gc日志写入文件中。

2024-04-18 11:25:49 1050

原创 面试题集中营—分布式共识算法

简单来说共识算法就是投票,主节点或者说处理客户端请求的节点由集群中所有的服务器投票得出(更准确的说有投票权的服务器投票得出)。这样就有一个保证,如果集群中有半数以上的服务器是可用的,那么我的服务就可用。我们又会将节点分成数据节点和管理节点,由管理节点来统一管理数据节点。现在服务节点高可用了,但是管理节点呢,又出现单点问题了,怎么办,好办,管理节点也做高可用,可是难道要给管理节点再增加管理管理节点吗?为了服务的高可用性,我们一般都会多引入几个副节点当备份,当服务节点挂了,就把其中一个副节点升级为主节点。

2024-04-18 09:35:15 592

原创 从零开始手写mmo游戏从框架到爆炸(二十七)— 英雄属性展示及穿戴装备-1

本章我们把命令行客户端与后台串起来,并完成穿戴装备的功能。

2024-02-28 13:59:01 622

原创 从零开始手写mmo游戏从框架到爆炸(二十六)— 装备、金币、经验的掉落与获取二

上一章我们完成了装备金币和经验掉落的计算,这一章我们来完成装备、金币与经验的获取。这里我们先改造英雄封装 - HeroWrapper。改造BattleEngine中获取经验、金币和物品的方法。分支:step-13。

2024-02-28 10:41:27 235

原创 从零开始手写mmo游戏从框架到爆炸(二十五)— 装备、金币、经验的掉落与获取一

装备已经可以通过模板生成出来了,但是正式使用过程中,应该是根据野怪的等级、品质、还有地图等级等等来随机获得装备。掉落装备的同时也应该同时掉落金币。金币的作用就不用多说了。

2024-02-27 09:19:24 497

原创 从零开始手写mmo游戏从框架到爆炸(二十四)— 装备系统二

大概解释一下就是根据野怪的等级找到可获得的装备模板列表,再根据品质去获得属性的浮动,品质越高浮动越小,这样品质高的武器将有机会获得更高的属性加成。分支:step-12。

2024-02-27 09:19:02 926

原创 从零开始手写mmo游戏从框架到爆炸(二十三)— 装备系统一

下一步,就是要考虑经验、金币、和装备掉落的问题。经验金币都好说,装备系统是目前需要考虑的问题。为了简化我们把装备分成武器、胸甲两个部位,后期可以慢慢扩展。此时我们还是需要装备模板。这个功能和之前的野怪模板、地图模板差不多。

2024-02-26 15:32:15 913

原创 从零开始手写mmo游戏从框架到爆炸(二十二)— 战斗系统三

其中大部分上一章已经基本讲过了,大家对着gitee上的分支源码来看即可,我们重点关注地图已经搜寻野怪的代码。地图中存储了野怪的等级已经出现的概率。)中,客户端已经可以创建英雄并且进入游戏主界面了,下一步,我们需要选择地图,并且和地图中的野怪来一张遭遇战。首先我们把上一章中的test路径下的demo移动到正式路径下并进行修改。我们把战斗系统demo应用到实际的项目中来。这个接口就一个方法,寻找野怪。选择地图:MenuHandler。客户端的相关handler。地图:TownMap。分支:step-12。

2024-02-26 15:31:41 396

原创 从零开始手写mmo游戏从框架到爆炸(二十一)— 战斗系统二

上一章我们说过,比如速度是1000的时候是每隔2秒钟攻击一次,但是服务器不能真的等两秒再计算攻击的结果,那么这个战斗的时长将会超过几分钟,用户也可能等这么久。首先Action接口中增加一个interval()的方法,用于获取时间间隔,这个时间间隔是预计攻击时间距离战斗开始时间的间隔,例如计算出来的攻击间隔是500,那么每次计算的结果就是500,1000,1500,2000...以此类推。第一个就是速度和出手间隔的换算,我们使用一个比较简单的公式,就是。那么根据这个方法我们来尝试改造战斗引擎。

2024-02-22 09:26:02 1019

原创 从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一

我们现在设计并尝试开发战斗系统。战斗系统我们先设定几个规则 1、多人对多人:英雄可以携带宝宝,面对的野怪也可以是成群的,故要设计成多人对多人的战斗引擎; 2、速度快的先出手:这点应该没有异议,根据速度来判定出手间隔,但是这里要有一个数据转换的问题,比如并不是速度100的就比速度50的出手速度快一倍,应该有一个计算公式来根据英雄的速度属性计算出手间隔。

2024-02-22 09:25:22 533

原创 从零开始手写mmo游戏从框架到爆炸(十九)— 用户数据封装与存储

首先一个用户应该会创建多个角色,故而先创建一个用户游戏封装类UserGameWrapper,每个角色也有一个封装类HeroWrapper。当一个用户登录或者注册成功的时候,要把其game数据查询并放到缓存中。用户在选择了职业之后, 后台接收需要创建用户的数据,这里我们要先把用户在后台的数据存储结构定义出来。客户端选择创建新英雄后,后端要生成英雄并保存到全局缓存中。客户端的LoginHandler的修改。LoginHandler修改。分支:step-11。

2024-02-21 09:37:40 316

原创 从零开始手写mmo游戏从框架到爆炸(十八)— 职业选择

本章我们在登录或者注册成功以后,让用户选择职业。选择好职业后再进入菜单。ClientMenuTag中增加新的tag在登录或者注册成功之后,返回可选职业列表已经和已经创建的英雄列表。目前暂时没有已创建英雄也没有存档的能力,故先返回可选职业列表,职业列表我们已经在前文【】实现了。

2024-02-21 09:37:13 475

原创 从零开始手写mmo游戏从框架到爆炸(十七)— 完善后端报错与客户端显示

从代码中可以看到,我们先是统一了返回的参数,同时对入参进行了解析,如果指定了转发的topic与tag就使用客户端指定的,如果没有指定就使用默认的。这里封装的还是有点粗糙但是味道是有了。这里其实就是把回调的topic和tag写入进去。这里最好强制所有的请求体都是对象而不是基础类型。我们在前后端交互的请求体的父类中再增加三个字段,分别是失败跳转topic,失败跳转tag,失败原因。修改所有的handler返回值都是 StringMessage。其他的代码就不贴出来了,大家可以自行去对应的tag中查看。

2024-02-20 09:09:20 171

原创 从零开始手写mmo游戏从框架到爆炸(十六)— 客户端指定回调路由与登录

在这之前,我们还要解决一个问题,就是服务端往客户端发消息的路由问题,这个路由其实应该由客户端来指定,因为客户端在不同的场景中可能会调用同一个服务端路由,比如查询英雄状态,装备状态等等。所以应该由客户端来指定回调地址比较友好。由于这个字段并不是必须的,我们可以把回调的topic和tag放到一个基类中。我们这次来把注册、登录、选择英雄,进入主页-选择地图的功能完善。补充登录相关的请求体以及执行handler。客户端增加登录的处理:LoginHandler。分支:step-09。

2024-02-20 09:09:04 388

原创 从零开始手写mmo游戏从框架到爆炸(十五)— 命令行客户端改造

之前的客户端就是简单的nettyclient,但是现在客户端也要解析topic和tag,所以我们根据server来改造客户端。剩余的改动这里就不一一赘述了,大家可以根据代码来看下调整的地方。到现在,我们切实需要一个客户端来完整的进行英雄选择,选择地图,打怪等等功能。修改command模块的结构,把tag根据不同的topic拆分到不同的类中,方便维护。首先再common模块中增加打印颜色的工具类:ConsoleColors。客户端的监听类- NetworkClientListener。分支:step-09。

2024-02-19 10:08:56 580

原创 从零开始手写mmo游戏从框架到爆炸(十四)— 英雄和野怪

之前都是模板的创建,现在我们来创建英雄和野怪。

2024-02-19 09:40:57 617

原创 从零开始手写mmo游戏从框架到爆炸(十三)— 地图与野怪模板

首先祝大家龙年大吉,大吉大利,财源滚滚,事事如意!角色有了,那么基本的功能应该包括选择地图,打怪,掉落装备,升级等等,我们一一来完成。首先我们设计野怪和地图。

2024-02-18 10:16:26 513

原创 从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定

角色模板是英雄和野怪通用的/*** @description: 角色模版**/// 力量 影响物理输出 物理技能输出// 护甲值 影响物理防御和法术防御// 体质 影响生命值 一点体质增加10点生命值// 魔力 影响法术输出 法术技能输出// 技巧 影响闪避率、暴击率// 攻击速度// 每升一级力量增加值// 每升一级护甲增加值// 每升一级生命力增加值// 每升一级魔法增加值// 每升一级技巧增加值// 每升一级速度增加值// 转职前的最高级别。

2024-02-18 09:28:26 476

原创 从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录

从这一章开始,我们进入业务的部分,从注册登录开始。

2024-02-07 09:54:10 523

原创 从零开始手写mmo游戏从框架到爆炸(十)— 集成springboot-jpa与用户表

集成springboot-jpa,不用mybatis框架一个是方便对接不同的数据源。第二个目前规划的游戏内容可能对数据库的依赖不是很大,jpa应该肯定能满足要求了。我们先创建一个用户表方便后续注册和登录的功能开发。分支:step-07。

2024-02-07 09:13:05 612

原创 从零开始手写mmo游戏从框架到爆炸(九)— 消息路由最终实现

我们已经在HandlerFactory中注册了所有的handler,此时只需要把投递过来的消息根据topic和tag找到对应的handler去执行就可以了,但是这里还有一个新的问题,就是投递过来的消息body都是string,但是我们很多时候传递过来的应该是对象的json字符串,所以我们要考虑反序列化的问题。同时为了尽可能的使用服务器的资源,处理的时候应该放到线程池中去处理,所以还需要增加一个线程池。改造NetworkListener。改造HelloHandler。分支:step-06。

2024-02-06 16:20:55 189

原创 从零开始手写mmo游戏从框架到爆炸(零)—— 导航

从今天开始我们尝试从零开始写一个mmo的游戏。主要技术还是netty。参考了网上很多的大神的框架,本来希望基于ioGame或者vert.x等来直接写功能的,觉得从零开始更有意义,而且咱们也不需要太NB的底层功能,够用就行。

2024-02-06 15:47:55 516

原创 从零开始手写mmo游戏从框架到爆炸(八)— byte数组传输

在这种场景下,只需要把这个解码器加到 pipeline 中,Netty 会使用换行分隔符,把底层帧分割成一个一个完整的应用层数据包,发送到下一站。适用场景:每个上层数据包的长度,都是固定的,比如 100。在这种场景下,只需要把这个解码器加到 pipeline 中,Netty 会把底层帧,拆分成一个个长度为 100 的数据包 (ByteBuf),发送到下一个 channelHandler入站处理器。这是一种基于灵活长度的解码器。我们之前使用的是自定义分隔符帧解码器,现在我们改用自定义长度帧解码器。

2024-02-06 15:16:27 1252

原创 从零开始手写mmo游戏从框架到爆炸(七)— 消息封装

上一篇,我们初步把消息handler 注册到了服务中,在进行后续工作之前我们需要再做一些准备工作。第一:把之前自己管理的bean放到spring中去管理,后面大部分的bean都通过spring来管理。第二:为了方便路由消费,我们要创建一个消息体方便byte字节数组传输。

2024-02-06 09:08:42 819

原创 从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂

就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。首先这里我们参考了rabbitmq中的topic与tag模型,topic对应类,tag对应方法。新增一个模块,专门记录路由eternity-command。然后再core中引入这个模块,同时增加反射依赖。创建监听器工厂 HandlerFactory。启动server,查看监听器是否初始化成功。抽象实现类BaseHandler。在core中增加一个文件夹。接口IHandler。分支:step-06。

2024-02-06 09:07:32 635

原创 从零开始手写mmo游戏从框架到爆炸(五)— 集成springboot

算了,放弃挣扎了,笔者写了一些代码,发现还是绕不过springboot,或者说自己来进行依赖管理最后肯定会爆炸的。同时方便后续接入第三方框架,咱们还是老老实实的接入springboot框架吧。有了spring,我们开始下一步,增加消息分发功能。分支:step-05。

2024-02-05 15:18:42 377

原创 从零开始手写mmo游戏从框架到爆炸(四)— session session

session是灵魂,没有session谈什么框架。其实session就是用户的数据绑定和channel的绑定,有了session我们就可以做很多事情

2024-02-05 12:10:46 533

原创 从零开始手写mmo游戏从框架到爆炸(三)— 服务启动接口与网络事件监听器

上一章我们完成了netty服务启动的相关抽象(),这一章我们再新增一个全局的服务启动类,方便后续扩展。

2024-02-04 17:03:50 478

原创 从零开始手写mmo游戏从框架到爆炸(二)— 核心组件抽离与工厂模式创建

上一章我们已经完成了一个基本netty的通信,但是netty的启动很多代码都是重复的,所以我们使用工厂模式来生成不同的ServerBootstrap。首先创建一个新的组件core组件,和common组件,主要用于netty通信和工具类,从server中分离出来没有本质的区别,就是希望可以把功能分散在不同的组件中,后续方便多人进行协同开发(如果有多人的话)。

2024-02-04 16:15:58 603

原创 从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

手写文字类mmo游戏框架与业务。首先完成服务端:eternity-server的开发,增加两个类:SocketServer.java、SocketServerHandler.java。然后完成客户端:eternity-client的开发,增加两个类:SocketClient.java、SocketClientHandler.java。让我们先把日志弄好,目前原则上咱们整体不考虑使用spring框架,所以综合考虑我们就使用log4j2。

2024-02-04 16:15:17 911 2

原创 Rocketmq消费者示例

上一篇讲述了生产者示例,这里继续消费者示例。

2023-11-03 14:36:13 202

原创 RocketMQ入门示例-生产者

大家好,本文主要是按照官网的教程把消费者和生产者的示例写下来,开箱即用。

2023-11-03 14:29:45 92

新员工培训材料-天宫paas分布式服务架构演进及k8s基础培训.pdf

新员工培训材料-天宫paas分布式服务架构演进及k8s基础培训

2022-12-13

2021年中国APaaS应用及选型研究报告

2021年中国APaaS应用及选型研究报告

2022-12-13

Http工具类,一个http的java工具类

Http工具类

2019-02-25

PPT素材库时间轴

PPT素材库时间轴

2018-08-31

PPT时间轴模板大全,PPT时间轴

PPT时间轴模板大全

2018-08-31

PPT模板素材-时间轴汇总大全

PPT模板素材-时间轴汇总大全

2018-08-31

cudnn-9.0-linux-x64-v7.2.1.38.tgz

cudnn-9.0-linux-x64

2018-08-31

重构-改善既有代码的设计》电子书高清版+源码

重构-改善既有代码的设计》电子书高清版+源码 重构-改善既有代码的设计》电子书高清版+源码 重构-改善既有代码的设计》电子书高清版+源码

2018-01-12

sshshell.zip

sshshell ssh shell 服务器 远程连接 FTP for mac ssh shell 服务器 远程连接

2018-01-02

FileZilla_3.29.0_macosx-x86.dmg

FileZilla_3.29.0_macosx-x86.dmg SSH 远程连接服务器工具

2018-01-02

rubygems-2.6.13

rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13rubygems-2.6.13

2017-11-03

genymotion-2.10.0.exe

genymotion-2.10.0.exe

2017-08-16

IBM-ECM解决方案介绍

IBM-ECM解决方案介绍IBM-ECM解决方案介绍IBM-ECM解决方案介绍

2016-12-06

Ext 3.0 中文帮助文档

Ext 3.0 中文帮助文档

2016-12-06

Java Web 投票系统

Java Web项目开发案例精粹02投票系统源码Java Web项目开发案例精粹02投票系统源码Java Web项目开发案例精粹02投票系统源码Java Web项目开发案例精粹02投票系统源码Java Web项目开发案例精粹02投票系统源码

2016-12-06

PI-API Installation Instructions

PI API 安装手册

2016-07-20

IBM_知识管理白皮书

IBM_知识管理白皮书

2016-04-07

JavaScript手册

JavaScript手册

2015-07-17

HTML+CSS+JavaScript帮助文档

HTML+CSS+JavaScript帮助文档

2015-07-17

SharePoint2007安装及使用教程(零基础)

SharePoint2007安装及使用教程(零基础)

2011-07-29

C语言写的员工管理系统

员工管理系统,这是一个员工管理系统,这是一个员工管理系统这是一个员工管理系统这是一个员工管理系统

2009-11-27

最短路径算法

计算各点到原点的最短距离

2008-06-25

C语言贪吃蛇

贪吃蛇游戏啊贪吃蛇用C的

2008-06-25

火车订票系统

添加,预订,更新,保存等

2008-06-24

C编的各种排序大全

插入排序,希尔排序,冒泡排序,快速排序,简单排序,堆排序

2008-06-24

C++编的计算器

计算器而已,没有什么

2008-06-24

简单计算器

c语言编得计算器,有需要的可以拿去用

2008-06-24

简单计算器

c语言编的计算器,大家有需要可以拿去用

2008-06-24

JAVA编的聊天器

自己搞得大家随便看看

2008-06-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除