`

TWaver HTML5 + Node.js + express + socket.io + redis(二)

阅读更多

在上一篇TWaver HTML5 + Node.js + express + socket.io + redis(一) 中,给大家介绍了Node.js 的安装;本篇将介绍Node.js的使用,您将了解到:

1. Node.js 的web框架:express
2. Node.js 的实时通讯框架:Socket.IO
3. Node.js 的redis客户端:redis

一. express
虽然用Node.js 写一个Hello World很简单:
新建一server.js文件,内容如下:

require('http').createServer(function (req, res) {
	res.writeHead(200, {'Content-Type': 'text/plain'});
	res.end('Hello World\n');
}).listen(8080, "127.0.0.1");

 然后打开命令行,进入server.js文件所在的目录,运行:node server.js,用浏览器打开http://localhost:8080/ 即能看到效果:


但稍微复杂的web应用就不能这么原始了,得借助于像express 这样的Web Framework 了。虽然express 提供了Session等功能,还有其他基于express的认证框架passport 等,但这里仅仅用express 作为静态网页服务:
将如下内容写入server.js文件:

//引入express模块,如果此处出错,请确认express已安装,
//而且express在环境变量NODE_PATH目录中
var express = require('express');
//创建web服务
var server = express.createServer();
//以当前目录下的demo目录为web应用根目录
server.use(express.static(__dirname + '/demo'));
//显示错误信息,以方便调试
server.use(express.errorHandler({
    showStack: true,
    dumpExceptions: true
}));
//启动express web服务,监听8080端口
server.listen(8080);

 

然后在server.js文件所在的目录创建demo目录,并创建demo.html文件,内容如下:

 

<!DOCTYPE html>
<html>
<head>
	<title>Node.js Demo</title>
</head>
<body>
	<div>
		Hello Node.js!
	</div>
</body>
</html>

然后重启Node.js服务,用浏览器打开http://localhost:8080/demo.html 即能看到效果:

 

二. Socket.IO
Socket.IO提供了WebSockets服务,如果浏览器不支持HTML5标准的WebSocket,会用Flash代替,而且支持Json的自动解析和序列化,下面以提供TWaver HTML5拓扑数据为例,演示如何使用Socket.IO:
首先修改上面的server.js文件,加入如下内容,以创建WebSockets服务,并响应获取拓扑数据动作:

 

//引入Socket.IO模块,如果此处出错,请确认Socket.IO已安装,
//而且Socket.IO在环境变量NODE_PATH目录中
var io = require('socket.io');
//创建WebSockets服务
var socket = io.listen(server, {
	log:false
});
//添加监听,相应前台请求
socket.sockets.on('connection', function(client){
	//查询数据
	client.on('getData', function () {
		//模拟数据
		var result = {
			nodes: [
				{
					id: 'from',
					name: 'From',
					location: { x: 100, y: 100 }
				},
				{
					id: 'to',
					name: 'To',
					location: { x: 200, y: 200 }
				}
			],
			links: [
				{
					id: 'from-to',
					name: 'Hello TWaver HTML5',
					from: 'from',
					to: 'to'
				}
			]
		};
		//返回数据
		client.emit('getData', result);
	});
});

前台demo.html修改如下,注意不要漏掉引入Socket.IO js库,而且src地址必须为/socket.io/socket.io.js:

 

<!DOCTYPE html>
<html>
<head>
	<title>Node.js Demo</title>
	<!--引用Socket.IO js库-->
	<script src="/socket.io/socket.io.js"></script>
	<script src="./demo.js"></script>
</head>
<body onload="init()">
	<div id="main">
	</div>
</body>
</html>

再在demo目录添加demo.js文件,内容如下:

 

//定义获取数据消息key
var GET_DATA = 'getData';
//WebSockets引用
var socket;

function init() {
	//创建WebSockets
	socket = io.connect('http://localhost/', { port: 8080 });
	//响应getData消息请求
	socket.on(GET_DATA, onGetData);
	//发送getData消息请求
	socket.emit(GET_DATA);
}

//getData消息处理方法
function onGetData(data) {
	console.log(data);
	document.getElementById('main').innerHTML = JSON.stringify(data);
}

 

最后重启Node.js,用浏览器重新打开http://localhost:8080/demo.html 即能看到效果:


三. redis
redis 是Node.js的Redis客户端,封装了Redis的指令,使用很简单,基本和Redis客户端命令 一致。这里只用到了hashes ,hashes相关的命令参见这里
开始之前,先切换到seraver.js文件所在的目录,启动redis服务(默认数据将保存在当前目录,文件名为dump.rdb)

 


 

然后启动redis客户端,运行如下命令,加入测试数据:

hset datas from "{\"id\":\"from\",\"name\":\"From\",\"location\":{\"x\":100,\"y\":100}}"
hset datas to "{\"id\":\"to\",\"name\":\"To\",\"location\":{\"x\":200,\"y\":200}}"
hset datas from-to "{\"id\":\"from-to\",\"name\":\"Hello TWaver HTML5\",\"from\":\"from\",\"to\":\"to\"}"
save
exit



 
 然后,修改后台server.js文件,加载redis模块,并创建redis客户连接:

//加载redis模块,创建redis客户端
var redis = require('redis').createClient();
//打印redis出错信息
redis.on('error', function (err) {
	console.log('Error ' + err);
});
 

再修改模拟数据部分,改为从数据库拿取数据,并将json格式的数据反序列化成js对象:

 

//添加监听,相应前台请求
socket.sockets.on('connection', function(client){
	//响应getData消息
	client.on('getData', function () {
		//查询数据
		redis.hvals('datas', function(err, value){
			if(value == null || value == ''){
				client.emit('getData', null);
			}else{
				//初始化返回结果
				var result = {}, nodes = [], links = [];
				result.nodes = nodes;
				result.links = links;
				//解析数据
				for(var i=0,data,n=value.length; i<n; i++){
					//反序列化json对象
					data = JSON.parse(value[i]);
					//如果存在from属性,则为Link
					if(data.from){
					    links.push(data);
					}
					//否则为Node
					else{
					    nodes.push(data);
					}
				}
				//返回数据
				client.emit('getData', result);
			}
		});
	});
});

 

最后重启Node.js,用浏览器重新打开http://localhost:8080/demo.html 即能看到和前面一样的效果。
至此一切准备工作完毕,下一篇将介绍如何使用TWaver HTML5展示这里生成的数据,本文代码见附件

  • 大小: 28.7 KB
  • 大小: 31.1 KB
  • 大小: 36.1 KB
  • 大小: 28.4 KB
  • 大小: 91 KB
分享到:
评论

相关推荐

    twaver.js使用示例

    5. **报警系统模拟**:“alarm”可能是一个具体的应用场景,展示如何使用twaver.js来设计和实现报警系统的图形界面,包括节点的状态变化、事件响应等。 6. **交互操作**:学习如何利用twaver.js库实现图形元素的交互...

    Twaver-html5.zip

    Twaver学习案例的例子

    TWaver HTML5 开发指南代码

    TWaver是一个高效且灵活的JavaScript库,专门用于构建基于HTML5的可视化应用。它提供了一整套完整的API,帮助开发者轻松创建和操作各种图形元素,包括节点、边、图层以及复杂的图表。TWaver不仅支持静态图表的展示,...

    twaver-html5-5.9.0-api_html5_-5.9.0-api_twaver_

    2. **api.js**:这个JavaScript文件可能包含了Twaver 5.9.0的源代码或者API函数的定义,方便开发者查阅和引用。 3. **data.json**:可能存储了关于API的元数据,如类、方法、属性等的描述,用于动态生成文档或提供...

    TWaver的3d图形组件库,小demo

    - "js":JavaScript,这表明TWaver库是用JavaScript语言编写的,适用于Web前端开发。 - "h5":HTML5,说明这个3D图形组件是基于HTML5标准的,具备良好的跨平台性和现代浏览器兼容性。 - "3d":表示3D图形技术,暗示...

    TWaver for HTML5

    TWaver的图形组件库中提供了拓扑组件、地图组件、设备图组件,以及表格、树图、属性表、图表等丰富的通用图形界面组件,为电信运营支撑系统(OSS)的开发提供“一站式”的组件产品和解决方案,是快速设计、开发和...

    twaver.jar java图形编程

    twaver jar在TWaver传统的2D应用中,近一年非常突出地出现了一种需求,那就是希望能够在同一个页面内显示多种层次的网络结构

    TWaver“一站式”UI组件提供包括网络拓扑图、地图、设备面板图、流程图、各种Chart图表、树图、表格等各种通用组件

    TWaver HTML5(以下简称TWaver)使用HTML5技术和javascript语言,可在支持HTML5的浏览器上进行绘图。 使用TWaver前,需熟悉几个基本概念:图元(Element)、容器(DataBox)和画布(Network)。 图元:图形中的...

    基于TWaver实现的3D机房Demo

    【基于TWaver实现的3D机房Demo】 在IT行业中,3D可视化技术正在逐步渗透到各个领域,尤其是在数据中心管理方面。TWaver是一款强大的WebGL3D框架,它为开发者提供了一个高效、灵活的工具,用于创建交互式的3D应用...

    twaver java 4.5.0

    6. **src**:源代码目录,其中包含了TWaver库的部分或全部源代码,这对于开发者进行二次开发和学习TWaver的工作原理非常有用。 7. **documents**:可能包含TWaver的用户手册、API文档或其他技术文档,帮助开发者更好...

    twaver使用包下载包括例子在里面

    是twaver学习的最佳资料,大家快来下巴

    TWaver .NET 开发指南+API(英文版)

    《TWaver .NET 开发指南+API(英文版)》是专为.NET开发者设计的一份重要参考资料,旨在帮助开发者深入理解和高效使用TWaver组件。TWaver是一个强大的数据可视化工具,尤其适用于创建复杂的图表、网络图以及地理信息...

    java开发拓扑图用户手册(twaver&itop).rar

    在这个上下文中,"TWaver" 和 "iTop" 是两个关键工具,用于创建复杂的拓扑图表。 TWaver是一款强大的可视化组件库,专门用于开发交互式的网络和业务拓扑图。它支持Java平台,提供了丰富的图形元素和交互功能,如...

    TWaver.swc 3.3.1

    TWaver-flex的库TWaver.swc

    twaver.js html 版本

    TWaver“一站式”UI组件提供包括网络拓扑图、地图、设备面板图、流程图、各种Chart图表、树图、表格等各种通用组件

    下载好的vue.js库资源,可以直接使用

    el: 关联 HTML 部分的标签, 使 vue 中的内容能够加载到 HTML里面去 data: 页面中需要的数据, 可以通过这个属性进行初始化, 进而赋值到 HTML 页面去 methods: 可以给当前vue对象添加方法, 一般我们都会把方法放在这个...

    Twaver_chinese_document

    TWaver HTML5使用JavaScript语言开发,可运行在多种现代浏览器:IE9+, Firefox, Chrome, Safari, Opera。请原谅我 没有列出具体的版本号,现在浏览器更新换代太快,而TWaver HTML5面向的是现代和未来的浏览器,所以...

Global site tag (gtag.js) - Google Analytics