Skip to content

pomelo 0.6版新特性

fantasyni edited this page Aug 29, 2013 · 15 revisions

在Pomelo 0.6版本中,对pomelo部分结构进行了调整,将原有的globalChannel组件和master高可用组件从框架中移出,以一种插件的形式提供给用户,具体可以参考pomelo-globalchannel-plugin, pomelo-masterha-plugin;同时在新版本中提供了一个交互式命令行工具,相比之前的命令行工具,使用更为方便、安全,对于项目的运维会更加方便;另外为了进一步提高pomelo的安全性,在0.6版本中引入了数据的签名验证,同时对hybridconnector的非法连接进行了相关处理;其它新的特性还包括详细的rpc debug日志和前端服务器的基本过载保护功能。 ##交互式命令行 为了方便开发者更好的对使用pomelo开发的服务进行运维,在新版本中提供了交互式命令行工具,具体情况可以参考pomelo-cli
##服务器连接认证
服务器与master之间的连接需要进行认证以提高服务的安全性,目前在pomelo-admin中提供了一个简单的服务器认证,可以看 admin auth
使用连接认证,需要在 config 目录下添加 adminServer.json 的文件

[{
    "type": "connector",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}, {
    "type": "chat",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
},{
    "type": "gate",
    "token": "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn"
}
]

type 是serverType, token 是一个字符串,你可以自己生成
你可以通过自己定义的认证还是来完成认证的工作
具体情况可以参考 admin auth server

##plugin机制 为了方便开发者根据自身的需求对pomelo原有的功能进行有效的扩展,在新版本中提供了插件机制的功能,同时将之前版本中的globalChannel和master服务器高可用部分以plugin的形式提供,具体情况可以参考 pomelo plugin。如果要将pomelo升级到0.6,对于之前的pomelo-sync库需要重新修改在app.js中的配置,参考配置修改如下:

var sync = require('pomelo-sync-plugin');
app.use(sync, {sync: {
 // opts parameters passed to constructor
}});

##连接加密 在pomelo 0.6版本中,对hybridconnector增加了数据签名的功能。客户端首先产生rsa的密钥对,客户端保留rsa私钥,在握手阶段客户端将公钥发到服务端;在发送消息阶段,客户端使用私钥对消息进行签名,客户端将消息和签名一起发送到服务端,服务端进行签名验证,如果验证成功后面的流程继续,如果验证失败则该数据包则不进行处理。具体流程可以参考下图:

rsa

###使用方法 在客户端连接的过程中增加encrypt:true,在服务端app.js中配置useCrypt,具体代码参考:

客户端 javascript pomelo.init({ host:'127.0.0.1', port:3014, encrypt:true }, function() { // do something connected });


服务端
```javascript```
app.set('connectorConfig', {
 connector: pomelo.connectors.hybridconnector,
 heartbeat: 3,
 useDict: true,
 useProtobuf: true,
 useCrypto: true
});

##非法连接处理 在pomelo中sioconnector是基于socket.io,socket.io本身是有对非socket.io的连接进行处理的。对于hybridconnector,底层是基于socket的,在pomelo 0.6版本中增加了对不符合规定协议的连接进行拒绝处理。主要包括两个部分:1.对空连接进行了超时处理;2.对不符合协议规范的连接进行拒绝处理。 ##rpc debug日志 根据网友的建议,在pomelo 0.6版本中增加了更多的rpc日志。开发者只需要在app.js中使用app.enable('rpcDebugLog')即可,另外需要在game-server/config/servers.json中配置category为rpc-debug的appender,具体配置可以参考如下代码:

json { "type": "file", "filename": "./logs/rpc-debug-${opts:serverId}.log", "maxLogSize": 1048576, "layout": { "type": "basic" }, "backups":5, "category": "rpc-debug" }


##过载保护
在pomelo之前的版本中有toobusy模块对服务器进行过载保护,在新版本中增加了一个对connector连接数的限制功能,开发者只需要在servers.json中对不同的connector进行最大连接数量的配置,当connector超过配置的最大数量,服务器会拒绝连接。配置可以参考如下代码:

```json```
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort":3050, "frontend":true, "max-connections": 100}

##服务器断网重连机制 在之前pomelo的版本中,在分布式环境下,存在服务器(非master)网络短时间断开,然后网络恢复后服务无法恢复的情况。在pomelo 0.6版本中,如果服务器(非master)短时间断开,网络恢复后服务器可以正常工作。

##Daemon启动模式 pomelo-daemon提供对pomelo服务进行分布式环境下的启动以及rpc debug日志的收集
详细情况请看 pomelo-daemon

##升级的logger 在新版中对pomelo中的logger进行了升级

  • logger支持自定义prefix输出,把prefix打印在消息的头部,prefix可以是文件名,serverId, host 等等
  • logger在debug模式下支持log行号的打印,方便开发者分析调试
  • 在pomelo中的日志统一输出到了category为pomelo的appenders
    详细情况请看 pomelo-logger

##pomelo-protobuf支持rootMsg的proto文件定义
通过定义rootMsg,可以很好的进行复用,简化protos文件的大小

{
  "message Path": {
    "required double x" : 1,
    "required double y" : 2
  },
  "message Equipment" : {
    "required uInt32 entityId" : 1,
    "required uInt32 kindId" : 2
  },
  "onMove" : {
    "required uInt32 entityId" : 1,
    "repeated Path path" : 2,
    "required float speed" : 3
  },
  "area.playerHandler.enterScene" : {
    "message Player" : {
      "message Bag" : {
        "message Item" : {
          "required uInt32 id" : 1,
          "optional string type" : 2
        },
        "repeated Item items" : 1
      },
      "required uInt32 entityId" : 1,
      "required uInt32 kindId" : 2,
      "required Bag bag" : 3,
      "repeated Equipment equipments" : 4
    },
    "optional Player curPlayer" : 2
  }
}

以上定义的Equipment和Path都是可能复用的root message。 详细情况情况 pomelo-protobuf

Clone this wiki locally