文档章节

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

nextzeus
 nextzeus
发布于 2017/07/07 18:35
字数 417
阅读 613
收藏 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
粉丝 12
博文 12
码字总数 4740
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

深入浅出node.js游戏服务器开发1——基础架构与框架介绍

2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的东西。但事实上它并不比w...

osc_deasqda4
2019/05/16
7
0
网易游戏服务器开发框架--Pomelo

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

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

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

大鸡蛋
2014/01/15
2.1W
11
历数2013年优秀的开源游戏引擎与开源游戏项目

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

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

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

打杂程序猿
2013/06/18
6.6K
9

没有更多内容

加载失败,请刷新页面

加载更多

Python笔记:记pandas中几个好用的函数

pandas是python数据分析常用的库之一!从数据加载到预处理,从数据分析到可视化,pandas提供了一站式服务。而以下这几个聚合统计函数,更是好用! 本文主要讲解pandas中的7个聚合统计相关函数...

tengyulong
36分钟前
23
0
使用“ let”和“ var”有什么区别? - What's the difference between using “let” and “var”?

问题: ECMAScript 6 introduced the let statement . ECMAScript 6引入了let语句 。 I've heard it that it's described as a "local" variable, but I'm still not quite sure how it beh......

javail
今天
17
0
如何将文件重置或还原到特定版本? - How can I reset or revert a file to a specific revision?

问题: I have made some changes to a file which has been committed a few times as part of a group of files, but now want to reset/revert the changes on it back to a previous ver......

fyin1314
今天
24
0
OSChina 周五乱弹 —— 头发和不要头发,你总要选一个

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雾 缀じた街 ふたつのかげ》- Porkkana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
49
0
一道 算法题 引发的 ‘xx现场’

请 熟悉的语言 去 验证 在输入框中输入的是否是一个正确的网址 初次读题萌新有点 不知所措的样子一查 MDN 吓一跳 ----- 一个不怎么熟悉的方法跳出眼边URL() 构造函数返回一个新创建的 ...

酒窝yun过去了
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部