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组件调用