问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pomelo 怎么接受rpc返回值

发布网友 发布时间:2022-04-12 22:20

我来回答

3个回答

懂视网 时间:2022-04-13 02:41

一、pomelo在GitHub上各个项目间的关系 1、pomelo项目 pomelo项目是一个 游戏服务器框架 ,用它可以创建 服务器端项目 。 2、chatofpomelo-websocket项目 chatofpomelo-websocket项目是由pomelo服务器框架创建的一个服务器端项目。这个项目与pomelo-cocos2dc

一、pomelo在GitHub上各个项目间的关系

1、pomelo项目

pomelo项目是一个游戏服务器框架,用它可以创建服务器端项目。


2、chatofpomelo-websocket项目

chatofpomelo-websocket项目是由pomelo服务器框架创建的一个服务器端项目。这个项目与pomelo-cocos2dchat项目一同实现了一个简单的聊天室功能。


3、pomelo-cocos2dchat项目

这个项目是一个由Cocos2d-x游戏引擎创建的客户端项目。这个项目与chatofpomelo-websocket项目是相匹配的客户端与服务端。


4、libpomelo项目

这个项目其实是一个第三方库,Cocos2d-x的项目要与基于pomelo的服务器通信,就需要这个第三方库的支持。


二、移动网络游戏的实现流程

移动网络游戏实现流程图


一个移动网络游戏由客户端与服务器端两个部分组成,客户端与服务器端可以通过例如websocket接口进行通信。

Cocos2d-x引擎提供创建Cocos2d-x项目的模板,为新建项目添加必要的库文件后,对项目进行代码实现即可得到游戏的客户端程序。

服务器端程序亦是如此,pomelo框架提供pomelo项目的模板,新建pomelo项目后进行代码实现就可以完成服务器端。启动服务器端之后再启动客户端即可实现游戏的运行。


pomelo 与 Cocos2d-JS 开发环境搭建

Mac下将libpomelo连接到Cocos2d-x的解决方案

Cocos2d-js v3.0-rc0 下 pomelo-cocos2d-jsb native web 配置

手把手教你把pomelo客户端组件libpomelo加入Cocos2d-x 3.0项目(Windows、Android、iOS平台)


来源网址:http://www.cnblogs.com/tangyikejun/p/3981042.html

热心网友 时间:2022-04-12 23:49

其实始要读pomelo框架非自没读node.js框架源码逐渐变想要知道pomelo框架何实现广播貌似游戏服务器比较重要功能吧

始觉种广播布式环境实现比较复杂搞明白pomelo实现发现采用种折实现广播虽没刚始自想牛*觉算种比较解决案吧

接用pomelo给chat例析吧看登录吧首先向gate服务器发起连接:

function queryEntry(uid, callback) {
var route = 'gate.gateHandler.queryEntry';
pomelo.init({
host: window.location.hostname,
port: 3014,
log: true
}, function() {
pomelo.request(route, { //发起请求用于获取用于连接connector服务器址
uid: uid
}, function(data) {
pomelo.disconnect();
if(data.code === 500) {
showError(LOGIN_ERROR);
return;
}
callback(data.host, data.port);
});
});
};
部代码主要要完目与gate进行通信gate返该客户用于连接connector服务器址我看看gate服务器址吧:

//next函数用于执行些操作返数据发送
handler.queryEntry = function(msg, session, next) {
var uid = msg.uid;
if(!uid) {
next(null, {
code: 500
});
return;
}
// get all connectors
var connectors = this.app.getServersByType('connector'); //获取素connector服务器配置信息
if(!connectors || connectors.length === 0) {
next(null, { //第参error第二参数wie返给客户端信息
code: 500
});
return;
}
// select connector
var res = dispatcher.dispatch(uid, connectors); //选取connector服务器
next(null, {
code: 200,
host: res.host,
port: res.clientPort
});
};
var crc = require('crc');

mole.exports.dispatch = function(uid, connectors) {
var index = Math.abs(crc.crc32(uid)) % connectors.length;
return connectors[index];
};
应该知道gate服务器挑选connector服务器吧获取用于连接connector应该建立与connector服务器连接进行登录代码:

//query entry of connection
queryEntry(username, function(host, port) {
pomelo.init({
host: host, //返用于连接connector服务器host与port
port: port,
log: true
}, function() {
var route = "connector.entryHandler.enter"; //做进行登录吧
pomelo.request(route, {
username: username,
rid: rid
}, function(data) {
if(data.error) {
showError(DUPLICATE_ERROR);
return;
}
setName();
setRoom();
showChat();
initUserList(data);
});
});
});
看调用connector服务器handlerenter传参数usernamerid(房间id)我看看connector服务器enter干些事情吧:

handler.enter = function(msg, session, next) {
var self = this;
var rid = msg.rid;
var uid = msg.username + '*' + rid //用户名字要加组名字
var sessionService = self.app.get('sessionService');

//plicate log in
if( !! sessionService.getByUid(uid)) { //表示相同用户
next(null, {
code: 500,
error: true
});
return;
}

session.bind(uid); //session与uid绑定起
session.set('rid', rid);
session.push('rid', function(err) {
if(err) {
console.error('set rid for session service failed! error is : %j', err.stack);
}
});
session.on('closed', onUserLeave.bind(null, self.app)); //设置closed事件处理函数

//put user into channel
//session适用于挑选台chat服务器要讲前frontend服务器serverID传送台要知道前channel用户都哪些frontend服务器面连接着
//挑选台chat服务器候用rid所保证*间同chatserver
self.app.rpc.chat.chatRemote.add(session, uid, self.app.get('serverId'), rid, true, function(users){
next(null, {
users:users //远程服务器返前channel面所用户
});
});
};

热心网友 时间:2022-04-13 01:07

确定要改bug加志定位位置始怀疑pomelo robot客户端发起请求查志排除发现用户加入候连接connectorconnector调用RPC端remote组件给其用户广播onJoin信息问题现connector调用RPCremote组件调用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
右附件包块怎么治疗? 右侧附件区见混合性包块回声、大小约4 .9*4。8cm.包膜完整、内可见不... 网络学术资源网络学术资源的获取途径 请问:正式出版物一定是合法出版物吗? 正式出版发行的期刊有哪些 玉米莲藕排骨汤怎么做才好吃 电脑开机进入不了BOSS, 怎么关闭苹果手机的自动备份功能 钢结构制作与安装的阶段和要点 钢结构设计的基本概念、关键步骤和应用 智齿了被虫吃空了不敢去拔一直拖着,现在掉了一小块,所以旁边有一块肉没有牙齿支撑,现在吃东西特别难受 急急急!!我的智齿把牙床顶破了一块肉,现在就像口腔溃疡的症状一样。。 智齿坏掉了,里面长了息肉,最近很疼,可以拔掉吗?拔的时候需要开刀吗 长智齿顶掉一块肉 福建省永春逢源饮料有限公司怎么样? 智齿烂了掉了一块,旁边的牙肉有点增生了,拔了智齿没有把那个牙肉切掉,直接缝起来了, 济南逢源伟业制冷有限公司怎么样? 汕头市逢源餐饮管理有限公司怎么样? 金立m2017能用有线耳机吗 广州逢源电子商务有限公司怎么样? 金立m5手机上的耳机没声音了 怎么回事 湖北左右逢源实业有限公司怎么样? 金立蓝牙耳机能听歌吗 金立m6plus耳机怎么用? 金立怎么关闭耳机模式 金立s5怎么关闭耳机模式 德邦物流对专科生的工资待遇 智牙旁边处掉了一块肉,连着牙龈 第四方物流的发展思考 金立牌真无线蓝牙耳机Gionee-T16是新上市吗? 羽绒服要怎么洗最好,洗好可以用洗衣机脱水吗 怎么钓都阳鳗鱼? wow人间美味任务怎么做 都阳鳗鱼怎么钓哪里钓 在网上订购儿童机票怎么取票 孤岛余生怎么钓鳗鱼 股市收盘最后一笔大单分时红的成交明细是绿的怎么回事呀? 股票收盘最后一笔红色大单好吗 防雨布发霉了怎样可以洗掉 太阳伞雨布发霉了怎么办 出口到国外的布长霉了,有什么处理方法?不然损失好大了 无纺布壁纸发霉要怎么处理 为什么微信好友发给我信息会跑到下面去,而不是在最上面 微信里的消息为什么别人发来的时候有些看不到消息!还前面的消息跑到后面了怎么回事 微信发送两个字跑下边去了解 微信选项跑到下面去了怎么办 以植物动物开头的优美的排比句 微信界面问题:聊天、发现通讯录等以前在上面,现在突然跑到下面了 普通数码相机和单反相机有何区别? 为什么现在微信变得每次我看前面的发过的聊天记录,但是别人一发就又跳到最下面了他新发的了!可以设置 libpomelo和socket.io有性能差异吗