vertx 例子 内存监控

前端extjs、in.js、jquery,后端:vertx

vertx 例子 内存监控_第1张图片

服务端代码:

Verticle里的Start方法里

// 监测内存total大小、free大小,一秒发生一个消息
vertx.setPeriodic(1000, new Handler<Long>() {
	// 监听系统资源情况
	@Override
	public void handle(Long event) {
		JsonObject message = new JsonObject();
		message.putString("free", String.valueOf(Runtime.getRuntime().freeMemory() / 1024 / 1024));
		message.putString("total", String.valueOf(Runtime.getRuntime().totalMemory() / 1024 / 1024));
		vertx.eventBus().publish("hd.core.server.info", message);
	}
});

前端main.js片段:

var cv = {
	message_services: {},
	translateEvent: function(message) {
		if (message['acts'] && message['acts'].length > 0) {
			jQuery.each(message['acts'], function(i, msg) {
				// 消息类型,js服务注册、加载资源(同步、异步)渲染+数据、更新数据、初始化参数、消息里包含多个处理
				// 执行消息:模版、数据、控制、业务DNA 表单的消息. act:,load_res,form,update_datas,char,,,,,,,,,,,,,,,,,,,,
				if (msg['act'] == 'service_reg') {
					//load_res,aaa
					var services = msg['services'].split(';');
					$.each(services, function(i, ser) {
						try {
							var ss = ser.split(',');
							if (typeof eval(ss[1]) == 'function') {
								cv.message_services[ss[0]] = eval(ss[1]);
							}
						} catch (e) {}
					});
				}
				if (msg['act'] == 'load_res') {
					var ress = new Array();
					// 加载资源
					jQuery.each(msg['resources'], function(i, res) {
						ress[i] = res['mod'];
						In.add(res['mod'], res);
						//In(res['mod'], function() {});
					});
					In.use.apply(this, ress);
				}
				if (cv.message_services[msg['act']] && typeof cv.message_services[msg['act']] == 'function') {
					// 把消息交给这个js函数处理
					cv.message_services[msg['act']].apply(this, msg);
				}
			});
		}
	},
	doLogin: function() {
		// 如果没有连接,连接并发送登录消息
		if (!cv['connect']) {
			In.add('sockjs', { path: 'js/util/sockjs-0.3.4.js', type: 'js',charset: 'utf-8' });
			In.add('vertxbus', { path: 'js/util/vertxbus-2.1.js', type: 'js', charset: 'utf-8' });
			In.add('jquery', { path: 'js/util/jquery-1.7.1.min.js', type: 'js', charset: 'utf-8' });
			In('sockjs', 'vertxbus', 'jquery', function() {
				if (!cv['eb']) {
					cv['eb'] = new vertx.EventBus("/eventbus");
					cv['eb'].onopen = function() {
						cv['connect'] = true;
						// 进行登录,发送登录消息
						cv['eb'].send("hd.core", {
							"act": "login"
						}, function(msg, replyTo) {
							// 消息分发
							cv.translateEvent(msg);
						});
					};
					cv['eb'].onclose = function() {
						cv['eb'] = null;
					};
				}
			});
		}
	}
};
// 资源按顺序加载
In.config('serial', true);
In.ready(function() {
	cv.doLogin();
});

首先加载In.config方法,ready里调用cv.doLogin。

doLogin里加载sockjs、vertxbus、jquery,加载之后发送动作是login的消息,之后 进入消息监听状态。

然后调用了translateEvent,根据msg['act']的值进行消息分发。

这里只做了个例子,根据监听“hd.core.server.info”频道的消息,用extjs的xtype: 'chart'控件展示服务器内存状态的编号。

其实这里可以做很多内容,例如:加载用户菜单、首页、实时的消息推送、聊天、甚至分布式计算都可以考虑考虑。

感兴趣的朋友可以到下面的地址获取代码。

源码:https://github.com/zhhzhfya/vx_platform

vertx 例子 内存监控_第2张图片

你可能感兴趣的:(vertx 例子 内存监控)