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

Pomelo Message

姬歌者
2023-12-01

Pomelo中有四种消息类型的消息,分别是requestresponsenotifypush


Pomelo客户端和服务器之间的通讯方式分为三种形式

  • request/response请求响应是一组,由服务器接收客户端request请求,处理完逻辑后做出response响应。

Pomelo中最常见的场景是Request/Response模式,客户端发送请求服务器异步响应。客户端的请求发送形式类似AJAX。

pomelo.request(url, msg, function(data){});
参数描述
url请求地址,完整地址包括三部分:服务器类型、服务端相应文件名、服务端相应方法名
msg消息体,可为JSO格式
callback回调函数,请求的响应会将结果放置在回调函数中返回给客户端。
  • notify是单向的,是客户端发给服务器的通知,是不需要服务器给与回复的请求。

notifyrequest-response类似,唯一区别是客户端只负责发送消息到服务器,客户端不接收服务器的消息响应。

pomelo.notify(url, msg);
  • push是服务器主动给客户端推送的消息,由客户端注册监听事件,处理具体的事件逻辑,比如公告、邮件等。

push是服务器主动向客户端进行消息推送,客户端根据路由信息进行消息区分进行转发。通常游戏服务器都会发送大量此类广播。

pomelo.on(route, function(data){});

客户端如何发送请求?

客户端可以向服务器发送两种类型的消息分别是request请求和notify通知。

  • request请求是双向的消息,也就是说服务器接收到一个客户端消息的时候,就得向客户端发回一个响应消息。此时Pomelo会发射出一个与请求相关得回调。
//客户端发送请求
pomelo.request("connector.helloHandler.ast", {msg:"hello"}, function(resp){});
  • notify通知是单向得消息,服务器无需提供响应。比如公告、通知、邮件等。
// 客户端发送通知
pomelo.notify("connector.helloHandler.say", {msg:"hi"});

服务器如何处理客户端消息?

Pomelo将进程流分为两部分分别是handler处理器和filter过滤器,handler处理器负责提供游戏逻辑,filter过滤器需要做前置和后续工作,比如日志和超时处理等。

前置过滤器beforeFilter

客户端发送的消息需要通过beforeFilter前置过滤器链来做一些前置处理,比如说验证当前玩家登录状态以及日志记录。

// 前置过滤器的接口
// msg 表示从客户端接收的消息对象
// session 表示当前用户的会话对象
// next 表示接下去的流程的回调函数
filter.before = function(msg, session, next){};

前置过滤器需要调用next()函数来跑到前置过滤器链中的下一个前置过滤器,当它穿过整条前置过滤器链时,将最终进入处理器。如果next()的第一个参数传入错误,则会出现错误进而停止进程流。

处理器handler

处理器时实现游戏逻辑的核心

//处理器接口
handler.methodName = function(msg, session, next){};

错误处理器errorHandler

错误处理器是一个可选项,它会处理全局错误,比如未知错误以及错误报告。

//设置错误处理器
app.set("errorHandler", errorHandler);

错误处理器接口

// 错误处理器接口
// err是前置过滤器或处理器传入的错误对象
// resp是处理器本来将要传送给客户端的响应消息
errorHandler = function(err, msg, resp, session, next){};

后续过滤器afterFilter

进程流最终会由后续过滤器来结尾,后续过滤器负责后续的处理,比如释放请求上下文资源,记录请求的处理事件。后续过滤器不会修改响应消息,因为在进入后续过滤器链之前,消息就已经发送到客户端了。

//后续过滤器接口
filter.after = function(err, msg, resp, session, next){};
 类似资料:

相关阅读

相关文章

相关问答