新增v2版本说明

This commit is contained in:
boyce
2024-04-26 14:02:59 +08:00
parent 3f45b19bab
commit 27723bf684

230
README.md
View File

@@ -1,5 +1,5 @@
origin 游戏服务器引擎简介
=========================
-------------------------
origin 是一个由 Go 语言golang编写的分布式开源游戏服务器引擎。origin适用于各类游戏服务器的开发包括 H5HTML5游戏服务器。
@@ -19,6 +19,10 @@ Hello world!
```go
go get -v -u github.com/duanhf2012/origin/v2
```
建议使用origin v2版本import引用中都加入v2
[README.md](README.md)
于是下载到GOPATH环境目录中,在src中加入main.go,内容如下:
@@ -26,7 +30,7 @@ go get -v -u github.com/duanhf2012/origin/v2
package main
import (
"github.com/duanhf2012/origin/node"
"github.com/duanhf2012/origin/v2/node"
)
func main() {
@@ -53,29 +57,140 @@ origin引擎三大对象关系
origin集群核心配置文件在config的cluster目录下如github.com/duanhf2012/originserver的config/cluster目录下有cluster.json与service.json配置
cluster.json如下
------------------
## origin配置说明
origin的配置文件以json格式主要包含Discovery、RpcMode、NodeList、Service部分具体格式如下
```json
{
"Discovery":{},
"RpcMode":{},
"NodeList":[],
"Service":{},
"Global": {}
}
```
### Discovery部分
origin目前支持etcd与origin自带的服务发现类型。
Etcd方式示例
```json
"Discovery": {
"Etcd": {
"TTLSecond": 10,
"DialTimeoutMillisecond": 3000,
"EtcdList": [
{
"NetworkName": ["network1"],
"Endpoints": ["http://192.168.13.24:12379"]
}
]
}
}
```
TTLSecond表示健康检查TTL失效时间10秒
DialTimeoutMillisecond: 与etcd连接超时时间
EtcdListEtcd列表可以多个Etcd服务器连接
NetworkName所在的网络名称可以配置多个。node会往对应的网络名称中注册、监听发现Service。NetworkName也起到发现隔离的作用。
EndpointsEtcd服务器地址
Origin方式示例
```json
{
"Discovery": {
"Origin":{
"TTLSecond": 10,
"MasterNodeList": [
{
"NodeId": "test_1",
"ListenAddr": "127.0.0.1:8801"
}
]
}
}
}
```
TTLSecond表示健康检查TTL失效时间10秒
MasterNodeList指定哪些Node为服务发现Master结点需要配置NodeId与ListenAddr注意它们要与实际的Node配置一致。
### RpcMode部分
默认模式
```json
{
"RpcMode":{
"Type": "Default"
}
}
```
默认模式下origin的node之前通过tcp连接组网。
Nats模式
```json
{
"RpcMode":{
"Type": "Nats",
"remark": "support Default or Nats",
"Nats": {
"NatsUrl":"127.0.0.1:4222",
"NoRandomize": true
}
}
}
```
NatsUrlNats连接url串
NoRandomize:在多连接集群模式下连接nats节点是否顺序策略。false表示随机连接true表示顺序连接。
### NodeList部分
```
{
"NodeList":[
{
"NodeId": 1,
"NodeId": "node_1",
"Private": false,
"ListenAddr":"127.0.0.1:8001",
"MaxRpcParamLen": 409600,
"CompressBytesLen": 20480,
"NodeName": "Node_Test1",
"remark":"//以_打头的表示只在本机进程不对整个子网公开",
"ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","_TcpService","HttpService","WSService"]
},
{
"NodeId": 2,
"NodeId": "node_2",
"Private": false,
"ListenAddr":"127.0.0.1:8002",
"MaxRpcParamLen": 409600,
"CompressBytesLen": 20480,
"NodeName": "Node_Test1",
"remark":"//以_打头的表示只在本机进程不对整个子网公开",
"ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService","HttpService","WSService"]
}
@@ -86,27 +201,27 @@ cluster.json如下
以上配置了两个结点服务器程序:
* NodeId: 表示origin程序的结点Id标识不允许重复。
* NodeId: 表示origin程序的结点Id标识同一个服务发现网络中不允许重复。
* Private: 是否私有结点如果为true表示其他结点不会发现它但可以自我运行。
* ListenAddr:Rpc通信服务的监听地址
* MaxRpcParamLen:Rpc参数数据包最大长度该参数可以缺省默认一次Rpc调用支持最大4294967295byte长度数据。
* CompressBytesLen:Rpc网络数据压缩当数据>=20480byte时将被压缩。该参数可以缺省或者填0时不进行压缩。
* NodeName:结点名称
* remark:备注,可选项
* ServiceList:该Node拥有的服务列表注意origin按配置的顺序进行安装初始化。但停止服务的顺序是相反。
---
在启动程序命令originserver -start nodeid=1中nodeid就是根据该配置装载服务。
在启动程序命令originserver -start nodeid="node_1"中nodeid就是根据该配置装载服务。
更多参数使用请使用originserver -help查看。
### Service 部分
service.json如下
------------------
```
{
"Global": {
"AreaId": 1
},
"Service":{
"HttpService":{
"ListenAddr":"0.0.0.0:9402",
@@ -206,6 +321,32 @@ service.json如下
* PendingWriteNum发送网络队列最大数量
* MaxMsgLen:包最大长度
### Global部分
```json
{
"Global": {
"AreaId": 1
}
}
```
这部分,在所有的服务中都可以类似以下代码获取:
```go
globalCfg := cluster.GetCluster().GetGlobalCfg()
mapGlobal, ok := globalCfg.(map[string]interface{})
if ok == false {
return fmt.Errorf("Canot find Global from config.")
}
areaId, ok := mapGlobal["AreaId"]
```
---
第一章origin基础:
@@ -219,8 +360,8 @@ simple_service/TestService1.go如下
package simple_service
import (
"github.com/duanhf2012/origin/node"
"github.com/duanhf2012/origin/service"
"github.com/duanhf2012/origin/v2/node"
"github.com/duanhf2012/origin/v2/service"
)
//模块加载时自动安装TestService1服务
@@ -230,7 +371,6 @@ func init(){
//新建自定义服务TestService1
type TestService1 struct {
//所有的自定义服务必需加入service.Service基服务
//那么该自定义服务将有各种功能特性
//例如: Rpc,事件驱动,定时器等
@@ -249,8 +389,8 @@ simple_service/TestService2.go如下
```
import (
"github.com/duanhf2012/origin/node"
"github.com/duanhf2012/origin/service"
"github.com/duanhf2012/origin/v2/node"
"github.com/duanhf2012/origin/v2/service"
)
func init(){
@@ -274,7 +414,7 @@ func (slf *TestService2) OnInit() error {
package main
import (
"github.com/duanhf2012/origin/node"
"github.com/duanhf2012/origin/v2/node"
//导入simple_service模块
_"orginserver/simple_service"
)
@@ -291,10 +431,9 @@ func main(){
{
"NodeList":[
{
"NodeId": 1,
"NodeId": "nodeid_1",
"Private": false,
"ListenAddr":"127.0.0.1:8001",
"NodeName": "Node_Test1",
"remark":"//以_打头的表示只在本机进程不对整个子网开发",
"ServiceList": ["TestService1","TestService2"]
}
@@ -305,7 +444,7 @@ func main(){
编译后运行结果如下:
```
#originserver -start nodeid=1
#originserver -start nodeid="nodeid_1"
TestService1 OnInit.
TestService2 OnInit.
```
@@ -720,7 +859,7 @@ func (slf *TestService7) CallTest(){
}
//自定义超时,默认rpc超时时间为15s
//自定义超时,默认rpc超时时间为15s,以下设置1秒钟超过
err = slf.CallWithTimeout(time.Second*1, "TestService6.RPC_Sum", &input, &output)
if err != nil {
fmt.Printf("Call error :%+v\n", err)
@@ -848,45 +987,35 @@ func (slf *TestService13) testAsyncDo() {
```
第七章:配置服务发现
第七章:服务发现
--------------------
origin引擎默认使用读取所有结点配置的进行确认结点有哪些Service。引擎也支持动态服务发现的方式使用了内置的DiscoveryMaster服务用于中心ServiceDiscoveryClient用于向DiscoveryMaster获取整个origin网络中所有的结点以及服务信息。具体实现细节请查看这两部分的服务实现。具体使用方式在以下cluster配置中加入以下内容
origin引擎默认使用读取所有结点配置的进行确认结点有哪些Service。引擎也支持动态服务发现的方式支持etcd与origin类型具体请参照【配置说明】部分Node结点可以配置只发现某些服务如下示例
```
{
"MasterDiscoveryNode": [{
"NodeId": 2,
"ListenAddr": "127.0.0.1:10001",
"MaxRpcParamLen": 409600
},
{
"NodeId": 1,
"ListenAddr": "127.0.0.1:8801",
"MaxRpcParamLen": 409600
}],
"NodeList": [{
"NodeId": 1,
"NodeId": "nodeid_test",
"ListenAddr": "127.0.0.1:8801",
"MaxRpcParamLen": 409600,
"NodeName": "Node_Test1",
"Private": false,
"remark": "//以_打头的表示只在本机进程不对整个子网开发",
"ServiceList": ["_TestService1", "TestService9", "TestService10"],
"MasterDiscoveryService": [
"DiscoveryService": [
{
"MasterNodeId": 2,
"MasterNodeId": "nodeid_1",
"NetworkName":"networkname1"
"DiscoveryService": ["TestService8"]
}
]
}]
}
```
MasterDiscoveryNode: 配置了结点Id为1的服务发现Master他的监听地址ListenAddr为127.0.0.1:8801结点为2的也是一个服务发现MasterNodeId为1的结点会从结点为1和2的网络中发现服务。
DiscoveryService在当前nodeid为nodeid_test的结点中发现 MasterNodeId为nodeid_1或NetworkName为networkname1网络中的TestService8服务。
**注意**MasterNodeId与NetworkName只配置一个分别在模式为origin或者etcd服务发现类型时。
MasterDiscoveryService: 表示将筛选origin网络中MasterNodeId为2中的TestService8服务注意如果MasterDiscoveryService不配置则筛选功能不生效。MasterNodeId也可以填为0表示NodeId为1的结点在所有网络中只发现TestService8的服务。
第八章HttpService使用
-----------------------
@@ -1019,16 +1148,16 @@ func (slf *TestTcpService) OnInit() error {
}
func (slf *TestTcpService) OnConnected(clientid uint64){
fmt.Printf("client id %d connected\n",clientid)
func (slf *TestTcpService) OnConnected(clientid string){
fmt.Printf("client id %s connected\n",clientid)
}
func (slf *TestTcpService) OnDisconnected(clientid uint64){
fmt.Printf("client id %d disconnected\n",clientid)
func (slf *TestTcpService) OnDisconnected(clientid string){
fmt.Printf("client id %s disconnected\n",clientid)
}
func (slf *TestTcpService) OnRequest (clientid uint64,msg proto.Message){
func (slf *TestTcpService) OnRequest (clientid string,msg proto.Message){
//解析客户端发过来的数据
pReq := msg.(*msgpb.Req)
//发送数据给客户端
@@ -1072,4 +1201,5 @@ _
bp-li
阿正
大头
Now'C
```