技术文章 > 服务端 > pomelo 用户指南 > 后端服务器 

后端服务器

    在这部分,我们继续讨论与用户请求相关的内容。
    后端服务器是用来处理用户请求的具体逻辑的地方,当前端服务器接收到来自客户端的请求时,通过分析请求的路由,并做简单的校验表明路由是合法的,那么前端服务器就会根据路由策略配置,选择某一后端服务器,发起 rpc 调用。后端服务器的所有调用请求均来自前端服务器的 rpc 调用。
    当后端服务器发起 filter-handler 链对前端服务器分派过来的请求进行处理时,如果仅仅需要给用户端响应,那么仅仅通过 rpc 的回调返回具体的响应即可。但是,很多情况下,具体的请求处理逻辑需要给其他用户推送消息。比如,在一个聊天应用中,当有一个用户发起聊天请求时,其聊天的所有内容都需要推送给同一房间的其他用户。当然,消息推送逻辑并不仅仅在后端服务器中使用,前端服务器也可能会有类似的场景。
    CoBackendSession 组件和 CoChannel 组件一般是用在后端服务器中的,它们一起来完成给特定的用户推送消息。我们知道,BackendSession 可以看作前端原始 session 在后端服务器的一个代理,CoBackendSession 包装的 BackendSessionService 就是用来创建并管理后端的 BackendSession,并可以通过相应的 bind 以及 push 调用,可以给前端原始的 session 绑定 uid,以及设置一些属性。
    CoChannel 包装的 ChannelService 中维护了 Channel 的信息,每一个 Channel 可以看作是一系列绑定用户的 uid 集合,通过 Channel 的相应调用即可向客户端推送消息。以下是对后端服务器来说,相应的类关系图:


以下是一些典型用例行为的时序图:


注意事项


总结


    对客户端请求的处理是 pomelo 较为复杂的部分,它由 pomelo 的多个组件共同完成,前端服务器上的 CoConnector 会加载 connector 并开启请求监听,当有客户端连接的时候,其对应的连接事件会触发,从而会新的连接创建并维护 session,这些操作由 CoSession 完成。当用户请求具体的服务的时候,前端服务器的 CoServer 会完成相应的服务器路由,后端服务器的 Remote 接收到请求后完成请求派发,后端服务器的 CoServer 会启动 Filter-Handler 链对请求进行处理,当处理过程中需要给 session 设置自定义属性以及绑定 uid 时,可以通过 CoBackendSession 来完成,当需要给客户端推送消息的时候,可以使用 CoChannel 提供的功能。当用户的请求通过了 Filter-Handler 链处理后,对应的响应会通过 rpc 调用的回调,再次返回到前端服务器的 rpc 发起者 CoServer,然后 CoConnector 会将后端的响应或者后端推送的消息调度给 CoPushScheduler,由 CoPushScheduler 实现具体的消息发布调度。当可以发布消息的时候,CoPushScheduler 会通过 CoSession 获得到客户端连接的 socket,然后通过 socket 将消息发送出去,完成整个消息处理流程。如果是用户的 notify,将不会发送响应。


来源:摘自 https://github.com/NetEase/pomelo/wiki/%E5%90%8E%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%99%A8,本站 行痴 整理