NetEase / pomelo

A fast,scalable,distributed game server framework for Node.js.
http://pomelo.netease.com
MIT License
11.86k stars 2.9k forks source link

unity client dose'nt receive messages from pomelo game server in many times #686

Closed saied63 closed 7 years ago

saied63 commented 9 years ago

I made a multiplayer game using pomelo and unity3d. When I tried to test pomelo server with less requests i got this error in pomelo :

http://www.imageupload.co.uk/56hz

Server info :

CPU - Dual Code RAM - 1 GB I wonder how lord of pomelo demo support 486 online player in MMORpg whereas my game can't . I used flowing conditions for testing server : In my game each player send 300 request per second and when I connected two player to server it gave me that error (as shown in image) whereas I have just two player connected to server-it mean's 600 req/s - communicating with each other and not a mmorpg game like lord of pomelo that has 486 player in just one scene.

I am confused, I am using socket.io in pomelo because websocket worked more bad. Hear are my main codes for pomelo game server: app.js var pomelo = require('pomelo'); var dispatcher = require('./app/util/dispatcher');

// route definition for field server var fieldRoute = function(session, msg, app, cb) { var fieldServers = app.getServersByType('field'); if(!fieldServers || fieldServers.length === 0) { cb(new Error('can not find field servers.')); return; } var res = dispatcher.dispatch(session.get('rid'), fieldServers); cb(null, res.id); }; /**

// app configuration app.configure('production|development', 'connector', function(){ app.set('connectorConfig', { connector : pomelo.connectors.sioconnector, //websocket, htmlfile, xhr-polling, jsonp-polling, flashsocket transports : ['websocket'], heartbeats : true, closeTimeout : 60, heartbeatTimeout : 60, heartbeatInterval : 25 }); });

app.configure('production|development', 'gate', function(){ app.set('connectorConfig', { connector : pomelo.connectors.sioconnector, }); });

app.configure('production|development', function() { // route configures app.route('field', fieldRoute); }); // start app app.start();

process.on('uncaughtException', function (err) { console.error(' Caught exception: ' + err.stack); });

connector.js :

module.exports = function(app) { return new Handler(app); };

var Handler = function(app) { this.app = app; };

var handler = Handler.prototype;

var oppnent_user=""; var opponent_guns; var opponent_fxs;

handler.entry = function(msg, session, next) { var self = this; var rid = msg.rid; var uid = msg.uid; var guns = msg.guns; var fxs = msg.fxs; var sessionService = this.app.get('sessionService');

//duplicate log in  
if( !! sessionService.getByUid(uid) ) 
{
    next(null, {
        code: 500,
        error: true
    });
    return;
}

session.bind(uid);
session.set('rid', rid);
session.pushAll();

session.on('closed', onUserLeave.bind(null, self.app));

//put user into channel
// befor we can push message to client first we must creat jchanels
self.app.rpc.field.userRemote.add(session, uid, self.app.get('serverId'), rid, true, function(){
   console.log('callback from rpc add to chanel');
    next(null, {
        code: 200,
        error: 'false'
    });
});

};

var onUserLeave = function(app, session) { if(!session || !session.uid) { return; } //app.rpc.chat.chatRemote.kick(session, session.uid, app.get('serverId'), session.get('rid'), null); };

fieldHandler.js : for pushMessage :

module.exports = function(app) { return new Handler(app); };

var Handler = function(app) { this.app = app; };

var handler = Handler.prototype;

/**

handler.rot = function(msg, session,next) { //console.log(session.get('frontendId')); //var backEndSession = this.app.get('backendSessionService');

var opponent_uid = msg.oppo_id;
var x_rot = msg.x;
var y_rot = msg.y;
var z_rot = msg.z;
var w_rot = msg.w;
var gun_number = msg.gun_no;

var rid = session.get('rid');
var channelService = this.app.get('channelService');
channel = channelService.getChannel(rid, false);

var param_defender = {
    x: x_rot,
    y: y_rot,
    z: z_rot,
    w: w_rot,
    gun_no: gun_number
};

var tsid = channel.getMember(opponent_uid)['sid'];
channelService.pushMessageByUids('OnRotate', param_defender, [{
    uid: opponent_uid,
    sid: tsid
}]);

next();

/* next(null, { ttt:'game started' }); */

   /* var asd = backEndSession.getByUid(session.frontendId,msg.uid,function(data){
    console.log('callback of backendSessionService');
    console.log(data);
});
*/

/*var rid = session.get('rid');
var uid = session.uid;
var guns = session.get('guns');
//var username = session.uid.split('*')[0];
var channelService = this.app.get('channelService');
var param = {
    opponent_id: uid,
    oppenent_guns: guns,
    opponent_fxs: msg.fxs
};
channel = channelService.getChannel(rid, false);

// channel.pushMessage('onChat', param);

//the target is specific user

var tuid = msg.uid;

// var tsid = channel.getMember(tuid)['sid']; channelService.pushMessageByUids('OnMessage', param, [{ uid: tuid, // sid: tsid }]);

next(null, {
    route: msg.route
});*/

};

and fieldRemote.j for making channels :

module.exports = function(app) { return new userRemote(app); };

var userRemote = function(app) { this.app = app; this.channelService = app.get('channelService'); };

/**

py8765 commented 9 years ago

cannot see the error picture