文档章节

Pomelo游戏服务器端开发系列(8)--消息类型

nextzeus
 nextzeus
发布于 2017/07/07 18:35
字数 417
阅读 44
收藏 0

#消息类型种类

pomelo中有四种消息类型:request, response, notify, push

request ,response

一般的web框架,例如express,短连接 两种消息类型request, response,有求必应。

notify

按理说长连接是不需要等待服务器端响应,也就是说客户端client可以使用notify, 不需要注册callback

lordOfPomelo notify使用

//client
$leaveTeam.on('click', function() {
    console.log('click leaveTeam ...');
    pomelo.notify("area.teamHandler.leaveTeam", {
        playerId: pomelo.playerId,
        teamId: pomelo.teamId
    });
    console.log('leaveTeam ~ pomelo.teamId = ', pomelo.teamId);
    $teamMenu.hide();
});


//server
Handler.prototype.leaveTeam = function(msg, session, next) {
  var area = session.area;
  var playerId = session.get('playerId');
  var player = area.getPlayer(playerId);

  if(!player) {
    logger.warn('The request(leaveTeam) is illegal, the player is null: msg = %j.', msg);
    next();
    return;
  }

  utils.myPrint('playerId, IsInTeamInstance = ', playerId, player.isInTeamInstance);
  if (player.isInTeamInstance) {
    next();
    return;
  }

  var result = consts.TEAM.FAILED;

  utils.myPrint("player.teamId = ", player.teamId);
  utils.myPrint("typeof player.teamId = ", typeof player.teamId);

  utils.myPrint("msg.teamId = ", msg.teamId);
  utils.myPrint("typeof msg.teamId = ", typeof msg.teamId);

  if(player.teamId <= consts.TEAM.TEAM_ID_NONE || player.teamId !== msg.teamId) {
    logger.warn('The request(leaveTeam) is illegal, the teamId is wrong: msg = %j.', msg);
    next();
    return;
  }

  var args = {playerId: playerId, teamId: player.teamId};
  this.app.rpc.manager.teamRemote.leaveTeamById(session, args,
    function(err, ret) {
      result = ret.result;
      utils.myPrint("1 ~ result = ", result);
      if(result === consts.TEAM.OK && !player.leaveTeam()) {
        result = consts.TEAM.FAILED;
      }
      if (result === consts.TEAM.OK) {
        var route = 'onTeamMemberStatusChange';
        if(player.isCaptain) {
          route = 'onTeamCaptainStatusChange';
          player.isCaptain = consts.TEAM.NO;
        }
        var ignoreList = {};
        messageService.pushMessageByAOI(area,
          {
            route: route,
            playerId: playerId,
            teamId: player.teamId,
            isCaptain: player.isCaptain,
            teamName: consts.TEAM.DEFAULT_NAME
          },
          {x: player.x, y: player.y}, ignoreList);
      }

      utils.myPrint("teamId = ", player.teamId);
    });

  next();
};

注意

需要注意的是,虽然说不需要等待服务器端的响应, 但是服务器一定要next() 只不过不需要返回任何信息给client. 如果不执行next回调,可能会导致进程中存在多个回调函数没有执行,rpc回调超市,这也可能是内存增长的一个点。

push

这个消息类型 是服务器端主动往客户端推送消息, 不需要客户端请求。只要与客户端的连接没有断开,就可以push消息过去。 推送消息的API : channel.pushMessage, channelService.pushMessageByUids, channelService.broadcast 这三个。

© 著作权归作者所有

共有 人打赏支持
nextzeus
粉丝 11
博文 12
码字总数 4740
作品 0
朝阳
程序员
网易游戏服务器开发框架--Pomelo

pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开...

谢骋超
2012/10/23
84.2K
10
历数2013年优秀的开源游戏引擎与开源游戏项目

2013年是移动游戏爆发的一年,也是开源游戏爆发的一年!在这里,我们历数一下2013年都有哪些优秀的开源游戏诞生,还有哪些优秀的开源游戏技术解决方案诞生! 开源跨平台2D客户端引擎 Cocos2...

大鸡蛋
2014/01/15
18.6K
11
用Pomelo 搭建一个简易的推送平台

前言 实际上,个人感觉,pomelo 目前提供的两个默认和 使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过, 网易的消息推送平台是基于pomelo开发的 (一个frontend 支持...

打杂程序猿
2013/06/18
0
9
当前的几种开源游戏服务端介绍

当前的几种开源游戏服务端介绍 pomelo Pomelo 是基于 Node.js 的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳...

bot911
2015/02/02
2.3K
0
当前的几种开源游戏服务端介绍

当前的几种开源游戏服务端介绍 pomelo Pomelo 是基于 Node.js 的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳...

opensourcecn
2015/01/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——单例模式

1. 认识单例模式 1. 定义:一个类中仅有一个实例,并提供一个访问它的全局访问点。 2. 结构:仅一个Singleton类,其中包含一个static类变量,而类变量的类型就是Singleton类,而且Singleton...

江左煤郎
9分钟前
0
0
前端安全系列之二:如何防止CSRF攻击?

背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常...

talen
10分钟前
0
0
Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图) 最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的...

原创小博客
11分钟前
0
0
Springboot + mongoDB : So easy

1. dependancy compile('org.springframework.boot:spring-boot-starter-data-mongodb') 2. config # mongodbspring.data.mongodb.host=***.mongodb.rds.aliyuncs.comspring.data.mongod......

园领T
23分钟前
1
0
centos 7( linux )下安装elasticsearch教程

目录 概述 环境准备 elaticsearch简介 安装elasticsearch 彩蛋 概述 很久没有写博客了,最近在做全文检索的项目,发现elasticsearch踩了不少坑,百度点进去又是坑,在此记录一下自己的踩坑历程。...

java_龙
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部