/* * web端请求pomelo服务器 */
/*
pomelo服务器只有一个master服务器,master服务器代理masterAgent代为管理master的所有进程.
一个服务器监听多个进程,这些进程都会在agent的管理下.
pomelo 自身有socket.io模块,web请求pomelo 服务器就采用socket.io 不是websocket连接.
pomelo-admin模块下 masterAgent.js文件 有一个listen会监听master服务器的所有事件. 这里主要是用到
socket.on('client',function( msg ){ .... }); 监听客户端发来的请求
msg参数是客户端呢发来的信息 判断msg中是否有命令
我 这里的参数是没有命令的
execute方法 该方法会调用moduleId下的clientHandler方法 这个方法里才是真正处理业务逻辑的地方
self.consoleService.execute(msg.moduleId, 'clientHandler', msg.body,function(err, res) {
if (protocol.isRequest(msg)) {
var resp = protocol.composeResponse(msg, err, res);
if (resp) {
socket.emit('client', resp);
}
} else { //notify should not have a callback
logger.warn('notify should not have a callback.');
}
});
参数中有一个moduleId 这个参数是在app.js文件中注册生成的, ======================================================== app.configure('production|development' ,function () {
var module = require("./modules/module.js");
app.registerAdmin(module, {app: app});
========================================================
======================================================== //module.js
module.exports = function (opts) {
return new Module(opts);
};
//对应consoleService.execute 方法中的msg.moduleId
module.exports.moduleId = 'module';
var Module = function (opts) {
opts = opts || {};
this.app = opts.app;
};
Module.prototype.clientHandler = function (agent, msg, cb) {
//业务逻辑都写在这里面 cb 将结果返回
};
========================================================