自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Zinx下MMO游戏具体实现-03世界聊天、上线的位置信息同步、移动位置信息广播、玩家下线

Zinx下MMO游戏具体实现-03世界聊天、上线的位置信息同步、移动位置信息广播、玩家下线1.世界聊天1.1.在msg.proto中添加一个message Talk//聊天数据(client 发送给 server)message Talk{ string Content=1;}运行build.go生成go文件1.2.在创建player的时候,给conn配置一个链接属性,作用是从c...

2019-05-31 21:33:19 415

原创 Zinx下MMO游戏具体实现-02玩家模块和世界模块

Zinx下MMO游戏具体实现1.构建项目目录core:存放算法、核心功能conf:zinx框架配置文件pb:存放用来与前端交互的proto文件apis:存放用户自定义的路由业务,一个msgID对应一个业务main.go:zinx-server开发的编程流程2.实现一个Player玩家模块2.1.在core中创建Player结构体并实现初始化函数type Player struct...

2019-05-30 23:09:29 401

原创 数据传输协议protocol buffer

数据传输协议protocol bufferGoogle Protocol Buffer (简称 Protobuf)是google旗下的一款轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式,只要实现相同的协议格式即同一 proto文件被编译成不同的语言版本,加入到各自的工程中去。这样不...

2019-05-30 23:08:21 2024

原创 Zinx下MMO游戏具体实现-01地图格子模块和AOI管理模块

Zinx应用-MMO多人在线游戏AOI兴趣点算法首先绘制一个2D的地图1.实现格子类1.1.创建一个地图中的格子类,并实现初始化函数type Grid struct { //格子ID GID int //格子的左边边界坐标 MinX int //格子的右边边界的坐标 MaxX int //格子的上边边界的坐标 MinY int //格子的下边边界的坐标 MaxY i...

2019-05-29 00:34:33 631

原创 Zinx-V0.10连接属性设置

Zinx-V0.10连接属性设置当我们在使用链接处理的时候,希望和链接绑定一些用户的数据,或者参数。那么我们现在可以把当前链接设定一些传递参数的接口或者方法。1.在抽象层IConnection添加给链接添加链接配置的接口type IConnection interface { ...... //设置链接属性 SetProperty(key string, value interfac...

2019-05-29 00:32:11 285 1

原创 Zinx-V0.6多路由的模式

Zinx-V0.6多路由的模式不同的Message应该对应不同的业务处理方式1.消息管理模块(支持多路由调度管理–拥有一个Router集合属性) MsgHandler模块1.1.抽象层 type IMsgHandler interface { //添加路由到map集合中 AddRouter(msgID uint32, router IRouter) //调度路由, 根据MsgI...

2019-05-27 23:30:46 202

原创 Zinx-V0.2简单的连接封装与业务绑定

Zinx-V0.2-简单的连接封装与业务绑定指定一个conn的处理业务1.定义抽象IConnectiontype IConnection interface { //启动链接 Start() //停止链接 Stop() //获取链接ID GetConnID() uint32 //获取conn的原生socket套接字 GetTCPConnection() *...

2019-05-27 22:06:37 149

原创 Zinx-V0.9链接管理

Zinx-V0.9链接管理我们要为Zinx框架增加链接个数的限定,如果超过一定量的客户端个数,Zinx为了保证后端的及时响应,而拒绝链接请求。1.在抽象层添加链接管理模块的一些方法type IConnManager interface { //添加链接 Add(conn IConnection) //删除链接 Remove(connID uint32) //根据链接ID得到链接 ...

2019-05-27 20:36:57 233

原创 Zinx-V0.8消息队列及多任务机制

Zinx-V0.8消息队列及多任务机制之前的zinx框架 是1个链接对应1个Reader和1个Writer, 1个消息对应一个Handler,如果说1个客户端发送10个消息 1w客户端 就10w消息,—> 10w Handler的go程来处理业务,cpu就会在10w handler之间进行切换,影响性能,这时就需要制定一个worker处理业务的工作池的机制。1.在MsgHandl...

2019-05-27 20:35:59 409

原创 Zinx-V0.7的读写分离模型

Zinx-V0.7的读写分离模型将zinx的读写模型变为:把Reader中的消息通过channel传递给Writer,使读写分离1.在Connection中添加一个channel用来给Writer传递数据,再添加一个channel用来传递Connection的关闭信息type Connection struct { ...... msgchan chan []byte isq...

2019-05-27 20:34:12 183

转载 binary包、bytes包:指定字节序列的读写

将data数据以指定字节序列写入w中Write(w io.Writer, order ByteOrder, data interface{}) error例如:var num uint32 = 100//创建一个存放二进制的字节缓冲buff := bytes.NewBuffer([]byte{})//num 写进buffer中if err := binary.Write(buff,...

2019-05-26 21:40:13 369

原创 Zinx-V0.5消息封装和处理tcp粘包

Zinx-V0.5消息封装和处理tcp粘包1.将Request中的data、len再进行封装,封装成一个message,其中包含id、data、len1.1.抽象层zifacetype IMessage interface { GetDataLen() uint32 //获取消息数据段长度 GetMsgId() uint32 //获取消息ID GetData() []byte //获取...

2019-05-26 00:54:02 401

原创 Zinx-V0.4增添全局配置代码实现

Zinx-V0.4增添全局配置代码实现1.创建一个全局配置的类type GlobalObj struct { /* server */ Host string //当前监听的IP Port int //当前的监听Port Name string //当前zinxserver的名称 Version string //当前框架的版本号 MaxPackageSi...

2019-05-25 00:26:53 190

原创 Zinx-V0.3框架基础路由模块

Zinx框架基础路由模块1.IRequest​ 把客户端请求的连接信息 和 请求的数据,放在一个叫Request的请求类里,这样的好处是我们可以从Request里得到全部客户端的请求信息,也为我们之后拓展框架有一定的作用,一旦客户端有额外的含义的数据信息,都可以放在这个Request里1.1.zifacetype IRequest interface { //得到当前的请求的链接 ...

2019-05-25 00:26:33 271

原创 Zinx-V0.1基础server

ZinxV0.1-基础server实现了简单的读写功能1.zinx最基本的两个模块ziface和znet​ ziface主要是存放一些Zinx框架的全部模块的抽象层接口类,Zinx框架的最基本的是服务类接口iserver,定义在ziface模块中。​ znet模块是zinx框架中网络相关功能的实现,所有网络相关模块都会定义在znet模块中。2.ziface抽象了server的方法:启...

2019-05-25 00:25:16 182

原创 使用Golang的interface接口设计原则

使用Golang的interface接口设计原则软件设计的最高目标:高内聚,低耦合1.开闭原则当我们给一个系统添加一个功能的时候,不是通过修改代码,而是通过增添代码来完成。开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 简单的说就是在修改需求的时候,应该尽量通过扩展来实现变化,而不是通过修改已有代码来实现变化。2.依赖倒转原则​如果我们在设计一个系统的时候,将模块分...

2019-05-23 01:49:41 712

转载 MySQL事务隔离

脏读事务A更新了数据但是并未提交,事务B查询到事务A更新的数据,事务A此时执行回滚操作,事务B读到的数据是脏数据。不可重复读事务A多次读取同一数据。事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一样。幻读事务A多次读取一组数据。事务B在事务A多次读取的过程中,对数据作了插入或删除,然后提交。导致事务A多次读取的一组数据时,结果并不相同,好像出现...

2019-05-20 20:34:33 107

原创 有关前端的一些小知识

有关前端的一些小知识1.在form表单中,如果input标签的type是checkbox,那么将会提交标签的value属性的值2.JQ获取单选框的内容,把它们name设为一样,name一样的为一组,然后判断它们的checked,如:addrId=$('input[name=addr]:checked').val()3.JS中获取页面数据都是string类型,比如传递过来的是一个切片[3,...

2019-05-19 09:28:45 219

原创 Beego下ORM过滤器的高级用法

Beego下ORM过滤器的高级用法查询GoodsSKU表中的名字包含xxx的字段o.QueryTable("GoodsSKU").Filter("Name__contains", “xxx”)查询profile表中age属性大于18的值qs.Filter("profile__age__gt", 18) // WHERE profile.age > 18操作符作用...

2019-05-16 17:25:26 4924

原创 Fdfs使用go语言上传文件

Fdfs使用go语言上传文件下载包1.在~/workspace/go/src 目录下面创建一个golang.org/x目录cd ~/workspace/go/srcmkdir -p golang.org/x2.进入golang.org/x下载两个包cd golang.org/xgit clone https://github.com/golang/crypto.gitg...

2019-05-16 17:10:52 938 3

原创 安装fastdfs-nginx-module

安装fastdfs-nginx-module解压缩 nginx-1.8.1.tar.gz解压缩 fastdfs-nginx-module-master.zip进入nginx-1.8.1目录中执行sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master的解压后的...

2019-05-16 15:37:35 553

原创 FastDFS安装

FastDFS安装安装FastDFS依赖包解压缩libfastcommon-master.zip进入到libfastcommon-master的目录中执行**./make.sh**执行sudo ./make.sh install安装FastDFS解压缩fastdfs-master.zip进入到 fastdfs-master目录中执行 ./make.sh执行 sudo ./...

2019-05-16 15:29:12 94

原创 Beego下的三级联动菜单实现

Beego下的三级联动菜单实现后台处理:在数据库中,我们设定pid字段为本级菜单的上级菜单的id号,设定一级类型pid为0。 o := orm.NewOrm() var oneClass []models.TpshopCategory o.QueryTable("TpshopCategory").Filter("Pid", 0).All(&oneClass) ...

2019-05-15 01:12:41 640

原创 Beego下的短信和邮件业务

Beego下的短信和邮件业务1.短信业务这里使用的是阿里云短信业务func RespFunc(this* UserController,resp map[string]interface{}){ this.Data["json"] = resp this.ServeJSON()}func(this*UserController)HandleSendMsg(){ //接受数据 ph...

2019-05-13 20:17:23 543

原创 Redis配置主从

Redis配置主从一般网站Redis读事件要远远多于写事件,就可以多建读端,也就是Redis的主从服务器。主服务:可读可写从服务:只读不写(注意区分主从复制(备份),主从复制是指主服务器崩溃,从服务器继续服务。)- 配置主:1.修改`redis.conf 文件中的bind,改为当前主机的ip地址。2.重启Redis服务:Sudo kill -9 pid号Sudo redis-se...

2019-05-13 15:10:49 75

原创 Beego中给前端ajax传递json数据

Beego中给前端ajax传递json数据1.定义一个传递给ajax的json数据的容器,如:resp := make(map[string]interface{})2.给容器赋值,如:resp["errno"] = 1resp["errmsg"] = "获取电话号码错误"3.把容器传递给前端this.Data["json"] = resp4.指定传递方式this.Serv...

2019-05-11 14:18:32 1825

原创 GO语言操作Redis

GO语言操作Redis1.安装驱动go get -u -v github.com/gomodule/redigo/redis2.连接Dial(network,address string)(conn,err)参数1:协议,tcp、udp等,一般会用tcp参数2:地址,如127.0.0.1:6379返回值1:连接(socket)返回值2:错误信息注意:不要忘了defer关闭连接...

2019-05-10 00:25:29 345

空空如也

空空如也

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

TA关注的人

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