设为首页 收藏本站
查看: 1453|回复: 0

[经验分享] TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(三)

[复制链接]

尚未签到

发表于 2015-7-20 09:49:35 | 显示全部楼层 |阅读模式
  在上一篇TWaver html5 + NodeJS + express + websocket.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文件,内容如下:

1 DSC0000.gif DSC0001.gif require('http').createServer(function (req, res) DSC0002.gif {
2 DSC0003.gif DSC0004.gif     res.writeHead(200, {'Content-Type': 'text/plain'});
3 DSC0005.gif     res.end('Hello World\n');
4 DSC0006.gif }).listen(8080, "127.0.0.1");  然后打开命令行,进入server.js文件所在的目录,运行:node server.js,用浏览器打开http://localhost:8080/即能看到效果:

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





1 DSC0008.gif //引入express模块,如果此处出错,请确认express已安装,
2//而且express在环境变量NODE_PATH目录中
3var express = require('express');
4//创建web服务
5var server = express.createServer();
6//以当前目录下的demo目录为web应用根目录
7server.use(express.static(__dirname + '/demo'));
8//显示错误信息,以方便调试
9server.use(express.errorHandler({
10    showStack: true,
11    dumpExceptions: true
12}));
13//启动express web服务,监听8080端口
14server.listen(8080);  然后在server.js文件所在的目录创建demo目录,并创建demo.html文件,内容如下:

1
2
3
4    Node.js Demo
5
6
7   
8        Hello Node.js!
9   
10
11  



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


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




1//引入Socket.IO模块,如果此处出错,请确认Socket.IO已安装,
2//而且Socket.IO在环境变量NODE_PATH目录中
3var io = require('socket.io');
4//创建WebSockets服务
5var socket = io.listen(server, {
6    log:false
7});
8//添加监听,相应前台请求
9socket.sockets.on('connection', function(client){
10    //查询数据
11    client.on('getData', function () {
12        //模拟数据
13        var result = {
14            nodes: [
15                {
16                    id: 'from',
17                    name: 'From',
18                    location: { x: 100, y: 100 }
19 DSC00010.gif                 },
20                {
21                    id: 'to',
22                    name: 'To',
23                    location: { x: 200, y: 200 }
24                }
25            ],
26            links: [
27                {
28                    id: 'from-to',
29                    name: 'Hello TWaver HTML5',
30                    from: 'from',
31                    to: 'to'
32                }
33            ]
34        };
35        //返回数据
36        client.emit('getData', result);
37    });
38});  前台demo.html修改如下,注意不要漏掉引入Socket.IO js库,而且src地址必须为/socket.io/socket.io.js:

1
2
3
4    Node.js Demo
5   
6   
7   
8
9
10   
11   
12
13  


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




1//定义获取数据消息key
2var GET_DATA = 'getData';
3//WebSockets引用
4var socket;
5
6function init() {
7    //创建WebSockets
8    socket = io.connect('http://localhost/', { port: 8080 });
9    //响应getData消息请求
10    socket.on(GET_DATA, onGetData);
11    //发送getData消息请求
12    socket.emit(GET_DATA);
13}
14
15//getData消息处理方法
16function onGetData(data) {
17    console.log(data);
18    document.getElementById('main').innerHTML = JSON.stringify(data);
19}  最后重启Node.js,用浏览器重新打开http://localhost:8080/demo.html即能看到效果:

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

DSC00012.png
  
然后启动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

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



1//加载redis模块,创建redis客户端
2var redis = require('redis').createClient();
3//打印redis出错信息
4redis.on('error', function (err) {
5    console.log('Error ' + err);
6});
再修改模拟数据部分,改为从数据库拿取数据,并将json格式的数据
1//添加监听,相应前台请求
2socket.sockets.on('connection', function(client){
3    //响应getData消息
4    client.on('getData', function () {
5        //查询数据
6        redis.hvals('datas', function(err, value){
7            if(value == null || value == ''){
8                client.emit('getData', null);
9            }else{
10                //初始化返回结果
11                var result = {}, nodes = [], links = [];
12                result.nodes = nodes;
13                result.links = links;
14                //解析数据
15                for(var i=0,data,n=value.length; i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88552-1-1.html 上篇帖子: TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(二) 下篇帖子: nodejs + socket.io + redis 新手上路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表