自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GO从零构建一个分布式IM系统

介绍这个系列将主要介绍从服务端基于go语言从零开始构建一个基于群聊分布式IM系统。同时提供了对应的android客户端作为功能的演示和验证,前后端均开源,方便二次开发。原则基于go语言来构建的这个群聊系统被命令为schat,即simple chat,首先需要满足simple,简单性。简单依赖在构建一个系统时不可避免的要集成其他的许多框架来综合使用,这又不断引入新的学习成本,提高了心智负担,所以在schat的构建过程中极力避免引入第三方框架或者其他库(除了逼不得已)。能使用GO的标准库尽量使用标

2020-12-21 17:10:18 874

原创 数据传输

说明上面一节通信协议是制定了schat业务系统所使用的业务数据描述协议,但在实际的数据传输过程中,包括服务器与服务器之间,服务器与客户端之间,它们是作为传输协议的有效载荷payload来进行发送的。所以这里就涉及到更下一层的数据传输过程。也包括两方面,服务器之间与服务器客户端之间.服务器之间传输服务器之间的数据传输使用了proc_bridge作为进程通信组件。具体的proc_bridge细节参见本人的github地址:proc_bridge。这里我们只需要知道参与通信的进程需要指定一个proc_id进

2020-12-21 21:56:33 274

原创 通信协议

说明下面将介绍schat服务框架所使用的序列化协议,所使用的协议从功能来说分为两类:服务器进程之间通信协议服务器与客户端通信协议服务进程通信协议服务器内部进程一般会部署在一个idc之中,内网通信,较为稳定和高效。我们使用protobuf作为协议描述和序列化工具,性能和兼容性都较好,官方本身也对go提供了良好的支持。具体的protobuf安装和go支持已经在上一篇说明,这里介绍具体的通信协议。描述下面摘自schat/proto/ss/ss.proto文档,描述了大概的协议轮廓:synt

2020-12-21 21:09:34 345 1

原创 SChat安装部署

说明下面将介绍搭建Schat服务的详细步骤,这期间除了redis和protobuf,基本不需要依赖其他大型的第三方框架,只使用少量本人之前编写的一些简单C库. 在进行过程中尽量使用手工安装,这样方便理解与排错。下面摘自github里schat相关的安装步骤.环境安装:基础软件GO下载页面https://golang.google.cn/dl/ 或者 https://golang.org/dl/ 这里下载并使用go 1.14版本,然后tar -C /usr/local -xzf go1.1

2020-12-21 19:47:52 1117

原创 SGame 连接选项

连接选项conn_serv.tmpl模板包含一些连接配置,这里将主要的进行说明:{ "logic_serv":$logic_serv, "log_file":"conn_serv.log", "max_conn":10000, "listen_addr":"$listen_addr", "manage_addr":["$m_addr"], "zlib_on":1, "valid_conn":1, "enc_type":3, "rsa_pub_key_file":

2020-09-16 17:23:43 377

原创 SGame 页面管理

SGame框架提供了一个页面管理工具,用来实时的监控和对运行时进程提供一些通用指令管理进程manager_serv是框架的管理进程代码位于sgame/servers/manager_serv目录下tree sgame/servers/manage_serv/sgame/servers/manage_serv/|-- html_tmpl| |-- detail.html| |-- index.html| `-- login.html|-- lib| |-- bas.

2020-08-14 22:01:04 600

原创 SGame 简单客户端

在sgame\client目录下提供了一个game_cli.go,提供了简单的功能,包括注册、登陆和登出说明首先进入client目录,然后编译之:go build game_cli.go; ./game_cli ./game_cli -h -a string server ip (default "127.0.0.1") -c string cmd -h show help -k int keepalive seconds

2020-08-14 21:02:18 1336

原创 SGame 多种语言接入

多语言接入 sgame/lib/net/ 目录里提供了与SGAME连接服务器的协议封装库文件,目前包括GO,C,JAVA三种,主要是对符合SGAME传输协议的数据进行打解包操作 net_pkg.go 以GO进行封装的API接口 net_pkg.c.api 以C封装的API接口,使用时需重命名为net_pkg.c net_pkg.java.api 以JAVA封装的API接口,使用时需重命名为net_pkg.java sgame/client/ 目录提供了上述几种语言编写的简单客户端

2020-08-14 21:01:20 978

原创 SGame 新加进程(2)

构建代码在建立了底层通信之后,只需要写disp_serv上层业务逻辑即可,我们在sgame/servers/目录下新建一个disp_serv和disp_serv/lib目录如下:|-- disp_serv| `-- lib拷贝connect_serv目录下的connect_serv.go到disp_serv/并改名为disp_serv.go。 拷贝connect_serv/lib/目录下的base.go,hearbeat.go,recv_msg.go,report.go,send_m

2020-08-14 20:00:27 222

原创 SGame 新加进程(1)

这里以disp_serv为例来说明新建一个进程所需的代码结构和相关配置通信配置首先我们需要将新的进程加入proc_bridge的通信链路中.打开sgame/proc_bridge/sgame/bridge.cfg,新加一组disp_serv进程 我们为disp_serv组的两个进程分别分配了proc_id:40001和40002,并让其委托进程分别监听于11000,11001端口[PROC]conn_serv-1 = 10001:127.0.0.1:10060logic_ser.

2020-08-14 19:54:34 702

原创 SGAME的日志系统

综述SGAME框架所使用的日志系统基于一个小的日志库slog,具体细节可以参考https://github.com/nmsoccer/slog其安装也很简单,会在/usr/local/lib下生成一个slog.a静态库(主要免去到目标机器时各种部署动态库的麻烦,而且便于调试). slog有一个slog.go作为GO的API,在框架里已经包含源码SGAME的日志目录位于sgame/lib/log,内容如下sgame/lib/log/|-- api.go`-- slog.go..

2020-08-14 19:34:54 547

原创 SGAME 框架说明

这是对SGAME当前的演示框架与配置做一个详细说明SGAME的安装请参考github地址的README:https://github.com/nmsoccer/sgame框架目前整个框架包含了两个功能组,四类进程。用于模拟一个最小的可用游戏框架组:GROUPX:游戏的主要逻辑组。负责客户端的接入;游戏的逻辑处理,玩家数据缓存以及DB的读写。为了方便说明,GROUPX被横向扩展为GROUP1和GROUP2,它们都行使相同的功能 DISPX: 游戏不同逻辑组的互相通信节点。负责维护不同

2020-08-11 17:28:56 5489

原创 SGAME:一个简单的go游戏服务端框架

SGame是一个由GO实现的游戏服务端框架。主要的考虑是看中GO的有趣且高效的开发速度和丰富的库资源。同时尽量用官方提供的标准库,尽量减少杂七杂八的依赖。博文后面再慢慢更,这里先放一下git地址:https://github.com/nmsoccer/sgame...

2020-08-04 21:29:23 2347 1

原创 统计进程的io读写

在/proc/[pid]/io文件里面为我们提供了这个接口。还是先看manpage:/proc/[pid]/io (since kernel 2.6.20)              This file contains I/O statistics for the process, for example:                  # cat /proc/3828/io  ...

2018-09-11 15:52:40 2712

原创 fdinfo 的说明

在/proc/pid/fdinfo里有关于进程打开文件的一些权限&位置信息,按照manpage是这样描述的:/proc/[pid]/fdinfo/ (since kernel 2.6.22)              This is a subdirectory containing one entry for each file which the process has open...

2018-09-10 21:31:59 4744

原创 关于下载图片较慢的一些探索

一直发现个人网站的部分图片加载很慢,所以想研究下具体原因到底是在流量不足还是说客户端自己的问题,同时顺便复习下一些工具一:搞起1.原图片大小,大概84K左右[ xxx]# stat _1527000864_2  File: `_1527000864_2'  Size: 84096         Blocks: 176        IO Block: 4096   regular...

2018-08-18 21:57:19 682

原创 关于pthread与文件描述符

新创建线程和主线程会共享地址空间,但在实际执行中各自都有独立的task_struct。那么在pthread_create一个新线程之后,如果主线程再打开一个文件,原有线程是否可以用主线程的句柄读写文件呢。一般来说通过文件句柄来读写文件遵循下面的流程通过对sys_clone的分析应该是可以的,下面验证一下:1.源码#include<stdlib.h>#include<stdio.h...

2018-07-09 21:51:15 674

原创 一个小型调试器的原理与设计

(按:由于鄙人文字奇烂,字迹尤丑,有不通凝塞之处还请看官忍耐。小文一篇,聊引方家解颐)由于之前一直对gdb的原理感到一定兴趣,所以最近小研究了一下调试器相关的东西(Linux平台)。gdb有一篇介绍其内幕的文档,《gdb 内幕》,传说里面有详细的gdb原理相关的东西。我也下来一看,全是E文,从目录到结尾一共用了大概五分钟左右,看得十分痛苦。幸好网上有一博文,对调试器基本原理有了很好的说

2013-10-28 17:33:32 1278

原创 HTML解析器

闲着没事学习用C写一个HTML文件的解析器,将每个标签作为节点,最后构建成一棵孩子兄弟二叉树。每个标签的左孩子是其子标签;右孩子是其兄弟标签。每个节点结构如下:typedef struct _dom_node{    unsigned short type;    /*type:Element Text Attribute*/    struct _dom_node *parent;        /*如果是标签那么指向父标签;如果是属性或者文本指向其父标签*/    struct _dom_n

2011-04-05 23:26:00 413

空空如也

空空如也

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

TA关注的人

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