Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo acepta pomelo los valores de retorno de rpc

Cómo acepta pomelo los valores de retorno de rpc

De hecho, la razón por la que comencé a leer el marco de pomelo no fue porque no había leído el código fuente del marco de node.js. Poco a poco, comencé a preguntarme cómo el marco de pomelo implementa la aparentemente importante función de transmisión del servidor de juegos. js framework código fuente Poco a poco, quiero saber cómo el framework pomelo implementa la transmisión, que parece ser una función más importante del servidor del juego

Comencé a sentir que el entorno de transmisión es más complicado y aprendí que pomelo implementa la transmisión usando Aunque la implementación del plegado no es tan impresionante como la idea inicial, también es una mejor solución

A continuación, use pomelo para mostrar el ejemplo de inicio de sesión para el chat y primero inicie una conexión al servidor de puerta. p> Luego use el ejemplo de chat proporcionado por pomelo para analizarlo. Inicie sesión. Primero inicie una conexión con el servidor de puerta:

función queryEntry(uid, callback) {

var. ruta = 'gate .gateHandler.queryEntry';

pomelo.init({

host: window.location.hostname,

puerto: 3014,

log: true

}, function() {

pomelo.request(route.{ //Inicia una solicitud para obtener la dirección del servidor utilizada para conectarse al conector

uid: uid

}, función(datos) {

pomelo.disconnect();

if(datos.código === 500 ) {

showError(LOGIN_ERROR);

return;

}

callback(data.host, data. puerto);

});

});

};

};

Parte de el código se utiliza con la comunicación de la puerta de enlace.

var uid = function(msj, sesión, siguiente) {

var uid = function(msj, sesión, siguiente) {

var uid = function( msj, sesión, siguiente) {

var uid = msg.uid;

if(!uid) {

siguiente(null, {

código: 500

});

return;

}

// Obtener todos los conectores

var Connectors = this.app.getServersByType('connector'); // Obtiene la información de configuración del servidor del conector principal

if(!connectors || Connectors.length === 0) {

next(null, { // error del primer parámetro, el segundo parámetro se devolvió al cliente

código: 500

});

return; /p>

}

//Seleccionar conector

var res = Dispatcher(uid, conectores); //seleccionar servidor de conector

siguiente (nulo, {

código:200,

host:res.host,

puerto:res.clientPort

} . ) ;

};

var crc = require('crc');

module.exports.dispatch = function(uid, conectores) {

var index = Math.abs(crc.crc32 (uid)) % conectores.length;

devolver conectores[index];

};

Debe tener en cuenta que el servidor de puerta de enlace seleccionará el servidor conector.

Conexión de código de inicio de sesión:

//Entrada de conexión de consulta

queryEntry(nombre de usuario, función (host, puerto) {

pomelo.init({

host: host, //regresa al servidor que se utiliza para conectarse al host y al puerto del servidor del conector

puerto: puerto,

log: true

}, function() {

var route = "connector.entryHandler.enter"; //haz el proceso de inicio de sesión.

pomelo.request(route, {

nombre de usuario: nombre de usuario,

deshacerse: deshacerse

}, función(datos) {

if(datos.error) {

showError (DUPLICATE_ERROR);

return;

}

setName();

setRoom();

p>

showChat();

initUserList(datos);

});

});

} ) ;

Al observar la llamada al servidor del conector handlerenter con el parámetro nombre de usuario (ID de la habitación), veo lo que ingresa el servidor del conector:

handler.enter = function( msg , sesión, siguiente) {

var self = this;

var rid = msg.rid;

var uid = msg.username + '*' + rid //Nombre de usuario que se agregará al nombre del grupo

var sessionService = self.app.get('sessionService');

//iniciar sesión duplicada

if( !sessionService.getByUid(uid)) { // Indica el mismo usuario

next(null,{

código: 500,

error: verdadero

});

return;

}

session.bind(uid); //La sesión está vinculada a uid

p>

session.set('deshacerse', deshacerse);

session.push('deshacerse', función(err) {

if(err) {< / p>

console.error('¡Error al eliminar el servicio de sesión! El error es: %j', err.stack);

}

});

session.on('cerrado', onUserLeave.bind( null, self.app.rpc.chat.chatRemote.add(session,uid,self.app.get('serverId '), rid, true, function (usuarios){

siguiente(nulo, {

usuarios:nosotros

ers //servidor remoto regresa al canal anterior usuarios presenciales

});

});

};