当前位置: 首页 > 工具软件 > Pomelo > 使用案例 >

Pomelo Connector

岳茂
2023-12-01

前端服务器 connector

pomelo是按约定来编程的,是微内核+插件实现方式。按照网络服务器流程,首先需要监听、绑定主机和端口,才有连接进来,连接建立后才有数据收发和编码解码。

connector是Pomelo的一个组件,俗称前端服务器。connector的网络处理是基于事件的,这也符合node.js的设计。connector是一个component,根据pomelo约定,component有start/afterStart/sop等调用,进行生命周期管理。

connector接收客户端的连接请求,创建与客户端的连接,维护客户端的session会话信息。connector接收客户端对后端服务器的请求,按照用户配置的路由策略,将请求路由给具体的后端服务器。当后端服务器处理完请求或需要给客户端推送消息的时候,connector同样会扮演一个中间角色,完成对客户端的消息发送。connector会同时拥有clientPort和port,其中clientPort是用来监听客户端的连接,port端口用来给后端提供服务。

由此可见,connector组件在pomelo中主要提供的功能:

  • 负责客户端连接:包括创建连接、维护连接、断开连接等
  • 处理请求和响应:将客户端的请求转发到后端服务器,将后端服务器的消息推送到前端。

为什么要使用connector呢?

pomelo的核心思想是分布式,将前端服务器connector组件和后端服务器server组件分开,connector只负责连接,server只负责请求的处理。这样分离后带来的优势:

  • 易扩展

前端服务器可以在数量上、连接方式上任意拓展。后端服务器由于只根据输入提供输出,使用场景也不仅限于connector上。

  • 热更新

由于前后端服务器在不同的进程之间,当对后端服务器进行更新时,即使是重启进程也不会影响客户端连接。

  • 逻辑分区

恰当的分配前后端服务器可以实现逻辑上对用户分区而非物理上分区。

如何配置connector呢?

只需在servers.json文件中定义connectorclientPort客户端端口和frontend选项。

$ vim game-server/config/servers.json
"connector": [
  {"id": "connector-server-1", "host": "127.0.0.1", "port": 3050, "clientPort": 3090, "frontend": true, "args":"--inspect=9002"},
  {"id": "connector-server-2", "host": "127.0.0.1", "port": 3051, "clientPort": 3091, "frontend": true, "args":"--inspect=9003"}
]

然后在app.js入口程序中配置connector的类型,pomelo启动时就会加载配置中的前端服务器。

$ vim game-server/app.js
app.configure('production|development', 'connector', () => {
    app.set('connectorConfig',{
        connector: pomelo.connectors.hybridconnector,
        heartbeat: 10,
        useDict: true,
        useProtobuf: true,
    });
});

connector组件流程分析,以hybirdconnector为例:

  1. 在connector组件中加载hybirdconnector实例用来获取引用
  2. connector组件启动时调用hybirdconnector.start监听来自客户端的连接
  3. 每当有新的客户端连接时new一个websocket实例用于监听客户端的请求
  4. 接收客户端请求时对消息进行解码
  5. 计算对应的后端服务器并调用获取返回值
  6. 对后端服务器的返回值进行编码
  7. 调用socket.send()方法将编码后的消息发送给客户端

pomelo的connector负责接收外部连接,同时做协议的编码解码,接收的时候解码,发送的时候编码。如果有对消息进行加密的话,也是在connector中处理的,如果有unicode还需转换为utf8。

connector与其它组件的交互:

connector依赖connection/server/pushScheduler/session组件,它是很重量级的。

  • 对connection的依赖是连接的增加减少以及登录用户uid的管理
  • 对server的依赖是获取配置以及server自身的信息
  • 对pushScheduler的依赖是当异步发送时将发送任务放到scheduler中
  • 对session的依赖是对连接创建一个会话

connector支持的通信协议

在客户端通信时pomelo提供了hybirdconnector和sioconnector,hybirdconnector支持TCP、WebSocket,sioconnector支持socket.io。实际编程中,可使用pomelo提供的接口自定义connector。

connector协议通信适用范围
hybirdconnectorpomelo.connectors.hybirdconnectorTCP、WebSocket使用二进制通信移动端
sioconnectorpomelo.connectors.sioconnectorsocket.io使用JSON通信PC端
udpconnectorpomelo.connectors.udpconnectorUDP二进制协议网路环境差数据包小的环境
mqttconnectorpomelo.connectors.mqttconnectorMQTT二进制物联网协议嵌入式设备

pomelo内部有各种协议的实现,典型的有protobuf、mqtt。

  • mqtt物联网协议的特点是体积小、效率高、省电,pomelo+mqtt能实现单机30w在线的推送。
 类似资料:

相关阅读

相关文章

相关问答