pomelo 日记 (博客迁移)



基本概念

1.1 why pomelo

环境

  • 开源社区里充斥了数不清的web服务器框架,游戏客户端的框架和库也有一大堆,但唯独游戏服务器框架少之又少
  • 商用的价格贵, 对部署的硬件成本也高。

特点

  • 约定大于配置。开发方便。
  • Node天然的分布式,启动快,占用资源少。
  • 硬件几乎没要求。

1.2、服务器划分



前端服务器(frontend)的职责:

    • 负责承载客户端请求的连接
    • 维护session信息
    • 把请求转发到后端
    • 把后端需要广播的消息或响应发送到客户端

后端服务器(backend)的职责:

    • 处理业务逻辑, 包括RPC和前端请求的逻辑
    • 把消息推送回前端或者将对客户端请求的响应发送到前端服务器

请求流程

    1. 通过http短连接,gate服务器,获取长连接的分配地址。

两种分配方式:

  • 房间号—同connector 服务器对应,或房间号取模分配。
  • Uid取模分配。
    1. 同connector建立连接。

例如通过pomelo.request("connector.entryHandler.entry", "{msg:hello,uid:?....}", function(data) { alert(data.msg); }); 来建立长连接, 并发送一次sendmsg请求。

在第一调用的时候将会包含3次握手的过程

 

    1. 发送数据。

约定优于配置:

  • pomelo.request("connector.entryHandler.entry") 请求的是connector 服务器的,entryHandle类的 entry 方法。
  • pomelo.request("chat.chatHandler.send")是通过connector转发的请求 chat服务器的chatHandler的send方法。
    1. 服务端推送消息给客户端。

var param = {

msg: msg.content +"aaaaaa",

from: username,

target: msg.target

};

channel = channelService.getChannel(rid, false);

//the target is all users

if(msg.target == '*') {

channel.pushMessage('onChat', param);

}

这里onChate为路由,是给客服端用的。 

传递协议



package格式

  • type - package类型,1个byte,取值如下。
    • 0x01: 客户端到服务器的握手请求以及服务器到客户端的握手响应
    • 0x02: 客户端到服务器的握手ack
    • 0x03: 心跳包
    • 0x04: 数据包
    • 0x05: 服务器主动断开连接通知
  • length - body内容长度,3个byte的大端整数,因此最大的包长度为2^24个byte。

var index = 1;

var length = ((bytes[index+]) << 16 | (bytes[index]) << 8 | bytes[index+]) >>> 0;

body - 二进制的传输内容。

Message 格式

非压缩路由,第一个字节表示路由字符串长度



心跳协议



服务器可以配置心跳时间间隔。当握手结束后,客户端发起第一个心跳。服务器和客户端收到心跳包后,延迟心跳间隔的时间后再向对方发送一个心跳包。

心跳超时时间为2倍的心跳间隔时间。服务器检测到心跳超时并不会主动断开客户端的连接。客户端检测到心跳超时,可以根据策略选择是否要主动断开连接。 

组件介绍

  • 特殊的组件
    • Session
    • Localsession
    • Channel
    • Proxy

组件可以简单理解为绑定在app上的属性对象。

插件

基本概念

1.1 why pomelo

环境

  • 开源社区里充斥了数不清的web服务器框架,游戏客户端的框架和库也有一大堆,但唯独游戏服务器框架少之又少
  • 商用的价格贵, 对部署的硬件成本也高。

特点

  • 约定大于配置。开发方便。
  • Node天然的分布式,启动快,占用资源少。
  • 硬件几乎没要求。

1.2、服务器划分



前端服务器(frontend)的职责:

    • 负责承载客户端请求的连接
    • 维护session信息
    • 把请求转发到后端
    • 把后端需要广播的消息或响应发送到客户端

后端服务器(backend)的职责:

    • 处理业务逻辑, 包括RPC和前端请求的逻辑
    • 把消息推送回前端或者将对客户端请求的响应发送到前端服务器

请求流程

    1. 通过http短连接,gate服务器,获取长连接的分配地址。

两种分配方式:

  • 房间号—同connector 服务器对应,或房间号取模分配。
  • Uid取模分配。
    1. 同connector建立连接。

例如通过pomelo.request("connector.entryHandler.entry", "{msg:hello,uid:?....}", function(data) { alert(data.msg); }); 来建立长连接, 并发送一次sendmsg请求。

在第一调用的时候将会包含3次握手的过程

 

    1. 发送数据。

约定优于配置:

  • pomelo.request("connector.entryHandler.entry") 请求的是connector 服务器的,entryHandle类的 entry 方法。
  • pomelo.request("chat.chatHandler.send")是通过connector转发的请求 chat服务器的chatHandler的send方法。
    1. 服务端推送消息给客户端。

var param = {

msg: msg.content +"aaaaaa",

from: username,

target: msg.target

};

channel = channelService.getChannel(rid, false);

//the target is all users

if(msg.target == '*') {

channel.pushMessage('onChat', param);

}

这里onChate为路由,是给客服端用的。 

传递协议



package格式

  • type - package类型,1个byte,取值如下。
    • 0x01: 客户端到服务器的握手请求以及服务器到客户端的握手响应
    • 0x02: 客户端到服务器的握手ack
    • 0x03: 心跳包
    • 0x04: 数据包
    • 0x05: 服务器主动断开连接通知
  • length - body内容长度,3个byte的大端整数,因此最大的包长度为2^24个byte。

var index = 1;

var length = ((bytes[index+]) << 16 | (bytes[index]) << 8 | bytes[index+]) >>> 0;

body - 二进制的传输内容。

Message 格式

非压缩路由,第一个字节表示路由字符串长度



心跳协议



服务器可以配置心跳时间间隔。当握手结束后,客户端发起第一个心跳。服务器和客户端收到心跳包后,延迟心跳间隔的时间后再向对方发送一个心跳包。

心跳超时时间为2倍的心跳间隔时间。服务器检测到心跳超时并不会主动断开客户端的连接。客户端检测到心跳超时,可以根据策略选择是否要主动断开连接。 

组件介绍

  • 特殊的组件
    • Session
    • Localsession
    • Channel
    • Proxy

组件可以简单理解为绑定在app上的属性对象。

插件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值