技术文章 > 服务端 > pomelo 用户指南-pomelo 插件 

plugin 文档

为了方便开发者根据自身的需求对 pomelo 原有的功能进行有效的扩展,pomelo 在 0.6 版本提供了一种灵活的插件机制。

Plugins


在 pomelo 0.6 版中,已开发完成组件包括: 另外可以参考使用插件机制完成的 chatofpomelo-plugins

结构


插件的结构主要包括两个部分:components 和 events,其中 components 是必要的,events 则可以根据插件自身所需功能进行配置。如下图所示:



components 跟 pomelo 中原有的组件功能一致,具体可以参考 pomelo 组件。它是服务器生命周期的服务单元,一个组件负责实现一类具体的功能。在 plugin 中开发者可以根据需要定义多个组件,开发者可以根据需要实现服务器不同生命周期的回调方法,包括 start、afterStart、stop 三个生命周期过程。
events 是为了开发者可以对 pomelo 中基本事件进行处理,开发者可以根据自身的需求对不同的事件进行监听并作出相应的处理。现在主要包括 add_servers、remove_servers、replace_servers、bind_session、close_session。

使用方法


pomelo 中使用 plugin 的相应 API 如下:
app.use(plugin, opts);
Arguments(参数说明): pomelo 中使用组件只需要在 app.js 中进行相应配置即可,具体可以参考如下代码:
var statusPlugin = require('pomelo-status-plugin');

app.use(statusPlugin, {
 status:{
  host: '127.0.0.1',
  port: 6379
 }
});
注意:由于 plugin 中可以有多个 component,所以相应的配置参数也可能为多个,为了区分不同组件的配置参数,在 use 方法的第二个参数中可以配置多个组件的配置参数,key 为相应组件的文件名,value 为配置参数。

构建方法


首先,需要创建一个符合plugin规范的空项目,具体的项目目录结构如下图所示:



其次,需要在 index.js 中进行相关配置,由于在 plugin 中 components 是必要的,所以必须在 index.js 中指明 components 的路径信息,events 如果有用到可以进行配置,具体配置参考如下代码:
module.exports = {
 components: __dirname + '/lib/components/',
 events: __dirname + '/lib/events/'
};
最后,就可以进行 components 和 events 中相关代码的编写。对于 component,需要对外提供相应的构造函数,pomelo 在加载过程中会将相应的服务器上下文信息和配置参数进行注入,具体可参考如下代码:
module.exports = function(app, opts) {
 return new Component(app, opts);
};

var Component = function(app, opts) {
 //do construction
};

Component.prototype.start = function(cb) {
// do something application start
};

Component.prototype.afterStart = function(cb) {
// do something after application started
};

Component.prototype.stop = function(force, cb) {
// do something on application stop
};
对于 event, 同样需要对外提供其构造函数,pomelo 会在加载过程中将相应服务器的上下文信息注入,开发者只需根据自身需要编写相应的回调函数即可,具体可参考如下代码:
module.exports = function(app) {
 return new Event(app, opts);
};

var Event = function(app) {
 //do construction
};

Event.prototype.add_servers = function(servers) {
 //do something when application add servers
};

Event.prototype.remove_servers = function(ids) {
 //do something when application remove servers
};

Event.prototype.replace_servers = function(servers) {
 //do something when server reconnected
};

Event.prototype.bind_session = function(session) {
 //do something when session binded
};

Event.prototype.close_session = function(session) {
 //do something when session closed
};


来源:摘自 https://github.com/NetEase/pomelo/wiki/plugin%E6%96%87%E6%A1%A3,本站 行痴 整理