从零开始学Go Origin框架
# 概述
origin 是一个由 Go 语言(golang)编写的分布式开源游戏服务器引擎。origin适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。
origin 解决的问题:
- origin总体设计如go语言设计一样,总是尽可能的提供简洁和易用的模式,快速开发。
- 能够根据业务需求快速并灵活的制定服务器架构。
- 利用多核优势,将不同的service配置到不同的node,并能高效的协同工作。
- 将整个引擎抽象三大对象,node,service,module。通过统一的组合模型管理游戏中各功能模块的关系。
- 有丰富并健壮的工具库。
# 生命周期
main.go main()
node.go Start()
command.go Run() 解析命令行参数
command.go execute()
args = ...[]byte //
// 计算总长度
var msgLen uint32
for i := 0; i < len(args); i++ {
msgLen += uint32(len(args[i]))
}
if msgLen > p.maxMsgLen { //长度不能大于4096
return errors.New("message too long")
} else if msgLen < p.minMsgLen { //长度不能小于1
return errors.New("message too short")
}
//创建一个byte容器,长度 = 2 +(内容长度)
// msg := make([]byte, uint32(p.lenMsgLen)+msgLen)
if p.littleEndian { //是否是小端
binary.LittleEndian.PutUint16(msg, uint16(msgLen))
} else {
binary.BigEndian.PutUint16(msg, uint16(msgLen))
}
// write data
l := p.lenMsgLen
for i := 0; i < len(args); i++ {
copy(msg[l:], args[i])
l += len(args[i])
}
conn.Write(msg)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
上次更新: 2023/01/11