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

Pomelo Session

锺离德庸
2023-12-01

会话Session

Session会话是指一个客户端连接的抽象,Pomelo框架中有三个session会话的概念分别是Session、FrontendSession、BackendSession。

会话字段结构

{
  id:<session id>//readonly
  frontendId: <frontend server id> //readonly
  uid: <bound uid> // readonly
  settings: <key-value map> //read and write
  __socket__: <raw_socket>
  __state__: <session state>
  //...
}
字段权限描述
id只读当前session会话的ID,全局唯一,自增方式来生成。
frontendId只读维护当前session会话的前端服务器的ID
uid只读当前session会话所绑定的用户ID
settings读写维护key-value map用来描述session会话的自定义属性
__socket__只读底层原生socket的引用
__state__只读用来指明当前session会话的生命周期状态

一个session会话一旦建立,那么idfrontendIduid__socket____state__都是确定的,都应该是只读不可写的。而settings也不应该被随意修改。

FrontendSession

因此在前端服务器中引入了FrontendSession可将其看作是一个内部session会话在前端服务器中的傀儡。

FrontendSession的字段结构

{
  id: <session id> // readonly
  frontendId: <frontend server id> // readonly
  uid: <bound uid> // readonly
  settings: <key-value map> // read and write
}

FrontendSession的作用

  • 通过FrontendSession可以对settings字段进行设置值,然后通过调用FrontendSessionpush()方法,将设置的settings的值同步到原始的session会话中。
  • 通过FrontendSessionbind调用可以给session绑定uid
  • 通过FrontendSession访问session的只读字段,不过对FrontendSession中与session中相同的只读字段的修改并不会反映到原始的session中。

BackendSession

BackendSessionFrontendSession类似,BackendSession是用于后端服务器的,可以看作是原始session的代理,其数据字段跟FrontendSession基本一致。

BackendSession是由BackendSessionService创建并维护的,在后端服务器接收到请求后,由BackendSessionService根据前端服务器RPC的参数进行创建。

服务 service

Pomelo框架有两个service服务:SessionServiceBackendSessionService

SessionService

SessionService维护所有的原始session信息,包括不可访问的字段,绑定的uid以及用户自定义的字段。

SessionService只存在于前端服务器,Session以每个客户端请求自增1的形式生成,用于管理连接Pomelo的客户端。如果在前端服务器不进行相关控制对于每个请求都会产生一个Session,就是说客户端都会在前端的服务器中的sessionService产生一个会话,值得注意的是自Pomelo0.4.x支持同一账号多处登录,所以sessionService中的session对应的是一个数组。如果对session不做任何处理的话,每刷新一次页面都会对这个session数组自增1,从暴露的API可以看出sessionService可以用于对连接在前端服务器的客户端,踢下线或利用session id直接在前端服务器发消息给客户端。

BackendSessionService

BackendSessionService的每次方法调用实际上都会生成一个远程过程调用,比如通过一个sid获取其BackendSession。同样对于BackendSession中字段的修改也不会反映到原始的session中,不过与FrontendSession一样,BackendSession也有pushbindunbind调用,它们的作用与FrontendSession一样都是用来修改原始中的settings字段或绑定/解绑uid的,不同的是BackendSession的这些调用实际上都是namespacesys的远程调用。

 类似资料:

相关阅读

相关文章

相关问答