自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王广帅--游戏开发技术

专注于网络游戏的开发

原创 Spring Cloud Gateway设置session超时时间

在使用Spring Cloud框架的时候,Http的请求首先会到达Spring Cloud Gateway服务,并与之建立session对象,但是在默认情况下,请求结果之后,session会立刻过期。有些业务场景可能会在session中存储一些数据,比如登陆状态,如果登陆之后,长时间没有访问,再次...

2020-06-18 21:23:14 97 0

原创 看阿里的代码Java是如何获取本地IP地址的

在服务器开发过程中,有时候为了方便,可以使用代码获取本机的IP地址,而不需要再手动配置了。阿里的代码一直是业界的标准,在看RocketMQ的源码的时候,看到了他们的一个获取本机IP地址的工具类,在这里给大家分享出来,有时候的拿来就可以使用。 public static String getLoca...

2020-05-31 18:29:52 87 0

原创 @RestControllerEndpoint 添加endpoints接口

@RestControllerEndpoint是Spring boot 2.x新增加的注解,但本质上是和@Endpoint,@WebEndpoint作用是一样的,都是为服务增加actuator 接口,方便管理运行中的服务。但是有一个明显的不同是,@RestControllerEndpoint只支持...

2020-05-23 11:30:12 102 0

原创 既然使用Logback,应该对它多些了解(四)

1. Mapped Diagnostic Context (MDC) logback的设计目前之一就是可以很好的在分布式系统中使用。在一个服务系统中,一般都会有多个线程,不同的客户端请求由不同的系统处理。MDC类似一个缓存,当收到客户端的请求时,可以将一些信息放在MDC中,在记录日志的时候可以从M...

2020-05-17 12:48:39 56 0

原创 既然使用Logback,应该对它多些了解(三)
原力计划

1. AsyncAppender 异步记录日志 AsyncAppender仅仅是做为一个日志分发器存在,因此,它必须绑定到其它的Appender上面。 AsyncAppender会将日志缓存在一个BlockingQueue之中,然后启动一个线程从队列中取日志输出。默认情况下,缓存队列的长度是25...

2020-05-17 12:47:33 44 0

原创 既然使用Logback,应该对它多些了解(二)
原力计划

上一篇:https://www.jianshu.com/p/824d5396d9ec 1. 变量作用范围(logback scopes) 在Logback中,变量有三种不同的scope:local scope ,context scope,system scope。 在变量替换的时候,首先从loc...

2020-05-17 12:46:54 59 0

原创 既然使用Logback,应该对它多些了解(一)
原力计划

1. 打印logback的内部状态信息 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core....

2020-05-17 12:46:03 86 0

原创 终于理解了设计模式-创建型模式
原力计划

1. 简单工厂模式 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有...

2020-05-17 12:45:16 67 0

原创 使用Spring Shell 快速开发自己的命令交互窗口
原力计划

Spring Shell 有时候,为了方便开发和测试服务器,并不需要一个漂亮的用户界面,使用一个简单的命令窗口即可。如下所示: 这里介绍一个快速,方便,易用,简单的交互式命令窗口开发组件-Spring Shell 没错,又是spring 生态中的。 源码地址 https://gitee.com/...

2020-04-29 20:30:34 98 0

原创 终于理解了设计模式-创建型模式
原力计划

1. 简单工厂模式 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有...

2020-04-29 20:29:07 58 0

原创 RocketMQ是如何使用Netty框架的
原力计划

Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件,它的通信能力已得到业界的公认。它的通信层是借助于异常网络框架Netty实现的。在开发网络游戏的时候,Netty也常用于游戏服务器或网关的通信层框架,所以,可以通过学习RocketMQ是如何使用Netty框架,从中借...

2020-04-12 10:43:03 139 0

原创 RocketMQ Namesrv服务启动时的参数配置

上篇文章说了一下在Namesrv启动时,它主要做了什么事情,从中可以知道,如果想正确的启动或修改Namesrv的启动配置时,会有几种不同的方式。 添加日志配置文件 如果是在本地Eclipse中使用Rocketmq的源码项目启动,需要添加日志配置文件,在项目下创建conf文件夹,添加配置文件:log...

2020-04-10 10:17:26 248 0

原创 Rocketmq的Namesrv服务启动时都做了什么

rocketmq-namesrv服务的启动类是NamesrvStartup。在启动的时候,首要的加载两个配置文件的信息,这两个配置文件对应的类是NamesrvConfig和NettyServerConfig。 NamesrvConfig 它的配置内容是: private String rocket...

2020-04-10 10:15:28 72 0

原创 游戏服务器开源框架(xinyue-game-frame)

今天给大家介绍一个开源的游戏框架,它是基于Spring Cloud + Netty实现的一个分布式游戏服务器框架,支持负载均衡,集群部署,动态扩展和伸缩,能基本满足休闲游,卡牌游戏,SLG游戏的服务器框架快速搭建。此框架配合Unity3d,提供了一个简单的捕鱼游戏案例,方便大家学习。 源码克隆地址...

2020-03-24 08:56:02 420 0

原创 RocketMQTemplate发送带tags的消息

RocketMQTemplate是RocketMQ集成到Spring cloud之后提供的个方便发送消息的模板类,它是基本Spring 的消息机制实现的,对外只提供了Spring抽象出来的消息发送接口。在单独使用RocketMQ的时候,发送消息使用的Message是‘org.apache.rock...

2020-03-23 09:57:42 831 0

原创 Netty零拷贝之CompositeByteBuf实际用法

Netty所谓的零拷贝就是在数据序列化操作的时候,尽量减少数据的复制。比如将一个byte[]转化为ByteBuf,如果这样写,就会多一次数据的复制: String a = "ccc"; byte[] bytesSrc = a.getBytes(C...

2020-03-23 09:56:13 62 0

原创 游戏创业公司技术体系构建

一,公司技术团队组建 当一款游戏项目确认,准备好启动资金之后,就是要考虑怎实现的问题了,技术团队是游戏产品实现的执行者,所以必须先组建一个强有力的技术团队,是成功的第一步。毛主席说过,正确的路线确定之后,干部就是决定因素。正所谓千军易得,一将难求。一个团队亦是如此,所以技术团队的负责人的能...

2020-03-23 09:48:29 1554 3

原创 Netty零拷贝之CompositeByteBuf实际用法

Netty所谓的零拷贝就是在数据序列化操作的时候,尽量减少数据的复制。比如将一个byte[]转化为ByteBuf,如果这样写,就会多一次数据的复制: String a = "ccc"; byte[] bytesSrc = a.getBytes(C...

2020-03-12 11:45:52 275 0

原创 python在IDE中可以运行成功,在命令窗口运行报错

在第一次做python开发的时候,在eclipse中运行没有任何问题,但是把python代码拿到外面,使用命令窗口执行的时候,就报错: PS D:\eclipse-project\python\src\config> py .\ServerDeploy.py Traceback (most ...

2020-03-01 11:44:33 309 0

原创 RocketMQ Web管理系统安装

下载rocketmq-console-ng.jar安装包 下载地址:http://www.xinyues.com/h-nd-213.html#_jcp=4_47 运行 nohup java -jar rocketmq-console-ng-1.0.1.jar --server.port=8...

2020-02-22 19:09:55 51 0

原创 Unity3d 如何移除某个GameObject的所有子物体

在开发游戏的时候,经验会遇到这样的需求:移除某个物体下面的所有子物体,比如排行榜列表的刷新,清空某个列表等。虽然Unity3d提供了一些现成的API可以操作,但是要正确移除一个物体下的所有子物体,还需要注意一些问题 通过Transfrom的childCount属性可以获取当前物体有多少个子物体 ...

2020-02-19 23:16:06 504 0

原创 Spring Cloud 微服务Nacos多环境配置

在Spring Cloud微服务开发时,一般会有多个部署环境,比如本地开发环境,内部测试环境1,内部测试环境2。这些环境没有必要每一个都部署一个Nacos注册中心,它们可以共用同一个nacos注册中心。但是如果直接使用同一个nacos注册中心,会导致注册冲突,因为不同环境的服务名字是相同的,大部分...

2020-02-17 14:14:25 417 0

原创 Unity3d 操作JSON数据

在做Unity3d游戏开发的时候,需要处理服务器或进配置文件的JSON数据,我使用了LitJson和NewtonsoftJson这两种,在使用Litjson的时候,遇到各种不顺利,这里就不多说了,还是感觉NewtonsoftJson好用,它的特点就是简单,好用。 NewtonsoftJson库导入...

2020-02-16 20:27:31 73 0

原创 Unity3d VerticalLayoutGroup 列表自适应高度

在游戏开发中,有很多列表都是代码根据需求动态实现的,比如排行榜列表,任务列表,关卡列表等。很多视频教程在讲列表组件VerticalLayoutGroup时,大部分都是在Unity3d 编辑器上面手动拖动创建,这个比较简单,在使用代码创建的时候,有些需要注意的地方,不知道这些地方总会出现一些意外情况...

2020-02-15 21:11:56 269 0

原创 Unity3d 根据鼠标点击旋转枪管方向

在做塔防游戏或射击类游戏的时候,都需要这样这一个功能:点击敌人的时候,枪管自动旋转对谁对敌,然后再射击。因为枪和敌人可能处在不同的UI层里面,所以要计算两个点之间的旋转角度时,需要使用世界坐标。如下面代码所示: private void Update() { Cha...

2020-02-13 17:14:57 93 0

原创 Unity3d 固定启动场景

在Unity3d的游戏开发中,会存在多个场景同时开发,但是每个场景需要的数据需要一定的顺序,比如登陆场景负责用户的登陆和数据加载,主城场景负责展示当前玩家在主城 中的数据。在开发的过程中,如果不是登陆场景,要运行unity3d编辑器,还要不停的切换到登陆场景,这样用起来挺麻烦的,那有没有一种方式,...

2020-02-12 14:36:07 270 0

原创 java jvm 内存溢出(OOM) 定位与优化

Java jvm内存溢出是指应用程序在运行的过程中,由于有不断的数据写入到内存,到导致内存不足,进程被系统内核杀死。所在在服务程序运行的时候,要观察一段时间的程序内存使用和分配情况。 故事原因 在一次游戏合服的操作之后,几个服的玩家被合并到同一个服,这个时候,玩家的数据量会猛增。突然就收到客服反应...

2020-02-11 11:45:52 160 0

原创 Unity3d 物体移动的方向和转向问题

需求场景 比如在屏幕中有一条鱼,它可以向左或向右移动,当它移到屏幕外面时,会和另外一个物体发生碰撞,碰撞之后,它需要向相反的方向移动。碰撞到右边的物体时,改为向左边移动,碰撞到左边的物体时,向左右移动。 物体移动的代码 这个代码简单: public int speed = 90; //移动...

2020-02-11 11:44:26 831 0

原创 BoxCollider2D不产生碰撞的解决方法

一般这个问题只有新手才会遇到,我就是一个新手,经过百度了很多次才终于解决,解决之后,才发现真的很简单。首先要理解一下碰撞的概念。在Unity3d中碰撞并不仅仅是真实世界中一个物体撞了一下另一下,产生物理的力的作用,而是还有一个“接触”的概念,就是说两个物体可能是慢慢靠近,最后挨着了,就像握了一下手...

2020-02-11 10:43:12 1061 0

原创 SpringBoot注解内容的动态配置

大家都知道,注解只能配置常量,在一些构架的开发中,有时候我们需要给注解动态配置一些值,或者想从配置文件中读取配置。直接在注解上配置是无法实现的,但是我们可以在拿到注解的值之后,再对这些值进行另外的操作。比如在注解上面配置占位符,在使用的时候,再对这些占位符进行替换。在RocketMQ的监听配置中,...

2020-02-11 10:29:54 534 0

原创 游戏服务器架构-数据持久化之数据复制

为了提高游戏服务器的吞吐量,玩家数据会在登陆的时候加载到服务器内存之中,在玩家玩游戏的过程中,操作的都是内存中的数据。但是这样子设计,如果服务器重启时,没有及时将数据更新到数据库,数据就会有丢失的风险。在设计服务器架构的时候,这个问题是架构师必须要解决的。因为在业务开发的时候,开发人员不应该关心数...

2020-01-08 12:09:01 166 0

原创 Unity3d C# Socket异步发送与接收数据

在网络游戏开发中,一些游戏需要使用长连接的方式进行网络通信,即使用Socket建立长连接。那么在Unity3d中,如何使用C#与服务端建立长连接呢?为什么 要说使用异步呢?我们知道,在Unity3d中,每个游戏画面的播放都是以帖的概念循环播放的。而且只能在UI线程中播放,在其它线程不可以操作UI有...

2019-12-08 23:25:26 189 0

原创 Spring gateway配置Spring Security实现统一权限验证与授权

在使用Spring Cloud 进行微服务,分布式开发时,网关是请求的第一入口,所以一般把客户端请求的权限验证统一放在网关进行认证与鉴权。因为Spring Cloud Gateway使用是基于WebFlux与Netty开发的,所以与传统的Servlet方式不同。而且网关一般不会直接请求数据库,不提...

2019-12-02 16:46:38 2034 0

原创 游戏上线后如何根据日志定位服务器问题

在游戏服务器开发中,日志是定位服务器问题的一个主要手段。特别是游戏服务上线之后,大量的用户操作会产生庞大的日志数据,假如在线上的服务器出现了bug,或者是数据异常,那么怎么样在这么庞大的日志文件中,怎么样方便快速的找到自己所要的数据呢。 线上的日志配置和开发环境的日志配置是不一样的。日志输出会分成...

2019-11-11 11:55:13 107 0

原创 Unity3d 制作聊天框

在使用Unity3d开发一个简易的聊天程序时,需要在客户端显示聊天记录列表,做为一个初学者,开发这个功能具然快用了两天了。最后通过调一个参数解决了。这里记录一下,希望对新手有所帮助。 最终的显示效果是这样的: 项目结构如图所示: 项目中的StartPanel是用来输入昵称和连接服务器用的,这里...

2019-11-04 22:42:28 558 0

原创 使用Spring Cloud Gateway搭建游戏服务网关(1)

在游戏服务器构架中,Web服务是其中重要的部分之一,像获取公告,游戏区列表,账号登陆与注册,礼包码的使用充值等,这些都可以使用Web服务实现,快捷又方便扩展,通过简单的配置就可以以集群的方式​提供服务。 在架构设计中,最重要的一个概念就是架构必须有足够的扩展性,可以随着业务量的增加,可以通加增加服...

2019-10-28 01:44:57 345 0

翻译 Spring cloud Gateway HTTS配置

在Web服务应用中,为了数据的传输安全,使用安全证书,使用TLS/SSL加密。这里就介绍一下Spring Cloud Gateway的HTTPS配置。 7.1 TLS/ SSL配置 TLS:安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性 SSL:SSL(Secu...

2019-10-19 19:14:34 94 0

原创 游戏服务器开发都要学什么

一,游戏服务器开发工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一名几年的游戏服务器开发者,当然是持欢迎态度的,那么我就先介绍一下游戏...

2019-08-22 17:26:27 24330 4

原创 log4j2 日志打两遍的问题

log4j2 日志打两遍的问题 在使用log4j2的时候,一般都需要不同的日志分类打印不同的日志等级,如下面的配置 <!-- 用于指定log4j自动重新配置的监测间隔时间,单位是秒 --> <configuration debug="off" monitorI...

2019-05-09 15:03:57 621 0

原创 Spring Cloud Gateway Ribbon 自定义负载均

在微服务开发中,使用Spring Cloud Gateway做为服务的网关,网关后面启动N个业务服务。但是有这样一个需求,同一个用户的操作,有时候需要保证顺序性,如果使用默认负载均衡策略,同一个用户的请求可能会转发到不同的服务实例上面。所以需要实现一个负载均衡规则。 1,重写LoadBalanc...

2019-03-15 16:06:17 3805 5

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