nodejs推送mysql数据更新到前端显示
发布日期:2016-4-15 15:4:2
nodejs推送mysql数据更新到前端显示 如下所示,是一些参考程序,虚妄对你们有所帮助: 001 server.js 002 //建立MySQL连接, 根据自己环境修改相应的数据库信息 003 var app = require('http').createServer(handler), 004 io = require('socket.io').listen(app), 005 fs = require('fs'), 006 mysql = require('mysql'), 007 connectionsArray = [], 008 connection = mysql.createConnection({ 009 host: 'localhost', 010 user: 'root', 011 password: 'root', 012 database: 'nodejs', 013 port: 3306 014 }), 015 POLLING_INTERVAL = 1000, 016 pollingTimer; 017 018 // 检查数据库连接是否正常 019 connection.connect(function(err) { 020 // 不出现错误信息,那表示数据库连接成功 021 console.log(err); 022 }); 023 024 //启动HTTP服务,绑定端口8080 025 app.listen(3000); 026 027 // 加载客户端首页 028 function handler(req, res) { 029 fs.readFile(__dirname + '/client.html', function(err, data) { 030 if (err) { 031 console.log(err); 032 res.writeHead(500); 033 return res.end('加载客户端首页发生错误...'); 034 } 035 res.writeHead(200); 036 res.end(data); 037 }); 038 } 039 040 /* 041 * 这个就是实现主要功能的方法,间隔3秒去查询数据库表,有更新就推送给客户端 042 */ 043 var pollingLoop = function() { 044 045 // 查询数据库 046 var query = connection.query('SELECT * FROM prices'), 047 articles = []; // 用于保存查询结果 048 049 // 查询结果监听 050 query 051 .on('error', function(err) { 052 // 查询出错处理 053 console.log(err); 054 updateSockets(err); 055 }) 056 .on('result', function(user) { 057 // 加入查询到的结果到articles数组 058 articles.push(user); 059 }) 060 .on('end', function() { 061 // 检查是否有客户端连接,有连接就继续查询数据库 062 if (connectionsArray.length) { 063 pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); 064 065 updateSockets({ 066 articles: articles 067 }); 068 } 069 }); 070 071 }; 072 073 074 // 创建一个websocket连接,实时更新数据 075 io.sockets.on('connection', function(socket) { 076 077 console.log('当前连接客户端数量:' + connectionsArray.length); 078 // 有客户端连接的时候才去查询,不然都是浪费资源 079 if (!connectionsArray.length) { 080 pollingLoop(); 081 } 082 083 socket.on('disconnect', function() { 084 var socketIndex = connectionsArray.indexOf(socket); 085 console.log('socket = ' + socketIndex + ' disconnected'); 086 if (socketIndex >= 0) { 087 connectionsArray.splice(socketIndex, 1); 088 } 089 }); 090 091 console.log('有新的客户端连接!'); 092 connectionsArray.push(socket); 093 094 }); 095 096 var updateSockets = function(data) { 097 // 加上最新的更新时间 098 data.time = new Date(); 099 // 推送最新的更新信息到所以连接到服务器的客户端 100 connectionsArray.forEach(function(tmpSocket) { 101 tmpSocket.volatile.emit('notification', data); 102 }); 103 }; 图1 需要组件如下所示 图2 运行的结果如下所示: 在nodejs 目录下 node server.js 启动服务 我监听的端口为3000 mysql数据库prices表有异动 nodejs 1socket.io 开始每3秒轮询 把数据传递至client 前端服务器websocket还是有缺点的,在中国这个ie6,7,8横行的国度里是没有效果的,我是用谷歌浏览器才测试的,火狐也可以。 当然你可以多开几个窗口,在prices表中有crud的操作,都会把mysql的数据推送到前端客户端... 有很多人对nodejs不是太了解,我把我写的js与主键放在一起了,点击bat文件即可,你唯一要修改的地方是修改mysql数据库连接与表名以及字段名称 版本是nodejs0.83 不是最新版本的,最新版本的socket.io 写法不一样.组件发生了变化,若对nodejs很了解不需要下载我的源码,不熟悉的话那么你不下载就运行不了,也学不会nodejs. 解压nodejs-push-MySQL.rar的时候不要把node_modules中的组件给删除了. 点击nodejs-push-MySQL文件夹修改server.js或client.html即可. 要连接oracle请自己下组件,其他数据库也一样. 下一条: Redis-深入了解
|