Cómo acepta pomelo los valores de retorno de rpc
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, p>
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) { p >
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, { p >
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);
}
}); p >
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
});
});
};