Pomelo杂记(一)

1、通讯类
-------------------------------------

目前Pomelo服务器提供两类connector:sioconnector和hybridconnector,分别对于基于socket.io和二进制的通讯。
1.1 sioconnector
支持基于socket.io的通讯协议,也是Pomelo框架默认采用的connector(主要是兼容老版本)。之前基于socket.io的服务器和客户端代码不用修改就可以使用(默认使用)。

1.2 hybridconnector

支持socket和websocket,使用二进制通讯协议,并且支持route字典压缩和protobuf压缩的connector,需要在app.js中显式配置。

-------------------------------------

2、通方式类
-------------------------------------

pomelo的客户端和服务器之间的通讯可以分为三种:

    request-response
    pomelo中最常用的就是request-response模式,客户端发送请求,服务器异步响应。客户端的请求发送形式类似ajax类似:
    pomelo.request(url, msg, function(data){});
    第一个参数为请求地址,完整的请求地址主要包括三个部分:服务器类型、服务端相应的文件名及对应的方法名。第二个参数是消息体,消息体为json格式,第三个参数是回

调函数,请求的响应将会把结果置入这个回调函数中返回给客户端。

    notify
    notify与request—response类似,唯一区别是客户端只负责发送消息到服务器,客户端不接收服务器的消息响应。
    pomelo.notify(url, msg);

    push
    push则是服务器主动向客户端进行消息推送,客户端根据路由信息进行消息区分,转发到后。通常游戏服务器都会发送大量的这类广播。
    pomelo.on(route, function(data){});

以上是javascript的api, 其它客户端的API基本与这个类型。由于API与ajax极其类似,所有web应用的开发者对此都不陌生。

-------------------------------------

3、会话机制Session

-------------------------------------

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

LocalSessionService 由于SessionService只存在于前端服务器(frontend),如果想在后端服务器(Backend)操作SessionService的话,就需要一个代理类(因为这是两个进程),从源码中可以看到,这个就是从前端服务器复制出来用于backend进行操作的SessionService,主要用于获取踢客户端下线,或者获取相关客户端Session Id。

LocalSession 是用于我们自定义的id 与全局 sessionService进行管理的类。主要用于服务端对客户端之间会话的管理。

从api 文档暴露的接口我们可以得知主要作用:

    让我们自定义的id 可以绑定到客户端与服务端之间的会话,用于管理客户端的状态。例如,利用绑定的id实现控制对客户端进行踢掉,监听session的关闭事件。

    localSession 还提供了一个K/V 的数据存取操作 需要用push或者pushAll 对sessionSerive进行更新。但是,根据官方的回复,不建议把session当做内存库。

一般情况下session在connector里面赋值,供他服务器使用,后端服务器session为localsession

-------------------------------------

4、handler接口

-------------------------------------

handler接口固定:function(msg,session,next)

msg为客户端要传递的参数,格式为json

session由pomelo自动传递

next(null,{route:msg.route}),null代表错误信息,没错误信息,就返回null

-------------------------------------

5、remote接口

-------------------------------------

remote接口不固定用于服务器之间通信

-------------------------------------


原文地址:https://www.cnblogs.com/bbsno1/p/3257919.html