• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
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

  

图3

  mysql数据库prices表有异动 nodejs

  1socket.io 开始每3秒轮询 把数据传递至client

  

图4
   c推送到client的数据

  

图5

  前端服务器websocket还是有缺点的,在中国这个ie6,7,8横行的国度里是没有效果的,我是用谷歌浏览器才测试的,火狐也可以。

  当然你可以多开几个窗口,在prices表中有crud的操作,都会把mysql的数据推送到前端客户端...

  

图6

  有很多人对nodejs不是太了解,我把我写的js与主键放在一起了,点击bat文件即可,你唯一要修改的地方是修改mysql数据库连接与表名以及字段名称

  版本是nodejs0.83 不是最新版本的,最新版本的socket.io 写法不一样.组件发生了变化,若对nodejs很了解不需要下载我的源码,不熟悉的话那么你不下载就运行不了,也学不会nodejs.

  解压nodejs-push-MySQL.rar的时候不要把node_modules中的组件给删除了.

  点击nodejs-push-MySQL文件夹修改server.js或client.html即可.

  要连接oracle请自己下组件,其他数据库也一样.