使用Nodejs实现实时推送MySQL数据库最新信息到客户端
来源:互联网 发布:win7的软件快捷方式 编辑:程序博客网 时间:2024/04/28 16:52
下面我们要做的就是把MySQL这边一张表数据的更新实时的推送到客户端,比如MySQL这边表的数据abc变成123了,那使用程序就会把最新的123推送到每一个连接到服务器的客户端。如果服务器的连接的客户端为0,也就是这时候没有客户端连接,那程序也不会执行推送信息的代码以免产生不必要的资源消耗,当有客户端连上的时候又开始推送。demo的代码大家可以到下面的Download按钮去下载。
要运行首先我们要安装nodejs要用到的mysql模块:
$ npm install mysql
更多关于mysql模块的使用请访问:https://github.com/felixge/node-mysql
再安装Socket.io模块:
$ npm install socket.io
更多关于socket.io模块的使用请访问:http://socket.io/
新建数据库nodejs,表articles(也可以把表建在你现有的的数据库上,修改一下相应的源代码):
CREATE DATABASE `nodejs`CHARACTER SET utf8 ;USE `nodejs`;SHOW DATABASES;USE `nodejs`;CREATE TABLE `nodejs`.`articles`(`title` TEXT , `author` TEXT ,`description` TEXT);
进入nodejs-push-MySQL目录运行demo:
$ node server.js
测试效果:
- 打开浏览器输入http://localhost:8080 (可以多开几个,明显能感觉到实时的推送效果)
- 使用MySQL工具登录到MySQL数据库,修改数据库nodejs里面articles表的数据
- 一旦表数据被保存,那些打开的客户端将收到最新的更改
client.html源代码:
<html><head><!-- * 更多demo: http://www.cxy808.com * 新浪微博: http://weibo.com/cxy808--><title>使用Nodejs实现实时推送MySQL数据库最新信息到客户端</title><style>dd,dt {float:left;margin:0;padding:5px;clear:both;display:block;width:100%;}dt {background:#ddd;}time {color:gray;}</style></head><body> <time></time> <div id="container">Loading ...</div> <script src="socket.io/socket.io.js"></script> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> // 创建websocket连接 var socket = io.connect('http://localhost:8080'); // 把信息显示到div上 socket.on('notification', function (data) { var articlesList = "<dl>"; $.each(data.articles,function(index,article){ articlesList += "<dt>" + article.title + "</dt>\n" + "<dd>" + article.author + "\n" + "<dd>" + article.description + "\n" "</dd>"; }); articlesList += "</dl>"; $('#container').html(articlesList); $('time').html('最后更新时间:' + data.time); }); </script> </body></html>
server.js源代码:
// 更多demo: http://www.cxy808.com// 新浪微博: http://weibo.com/cxy808//建立MySQL连接, 根据自己环境修改相应的数据库信息var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'), mysql = require('mysql'), connectionsArray = [], connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'root', database: 'nodejs', port: 3306 }), POLLING_INTERVAL = 1000, pollingTimer;// 检查数据库连接是否正常connection.connect(function(err) { // 不出现错误信息,那表示数据库连接成功 console.log(err);});//启动HTTP服务,绑定端口8080app.listen(8080);// 加载客户端首页function handler(req, res) { fs.readFile(__dirname + '/client.html', function(err, data) { if (err) { console.log(err); res.writeHead(500); return res.end('加载客户端首页发生错误...'); } res.writeHead(200); res.end(data); });}/* * 这个就是实现主要功能的方法,间隔3秒去查询数据库表,有更新就推送给客户端 */var pollingLoop = function() { // 查询数据库 var query = connection.query('SELECT * FROM articles'), articles = []; // 用于保存查询结果 // 查询结果监听 query .on('error', function(err) { // 查询出错处理 console.log(err); updateSockets(err); }) .on('result', function(user) { // 加入查询到的结果到articles数组 articles.push(user); }) .on('end', function() { // 检查是否有客户端连接,有连接就继续查询数据库 if (connectionsArray.length) { pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); updateSockets({ articles: articles }); } });};// 创建一个websocket连接,实时更新数据io.sockets.on('connection', function(socket) { console.log('当前连接客户端数量:' + connectionsArray.length); // 有客户端连接的时候才去查询,不然都是浪费资源 if (!connectionsArray.length) { pollingLoop(); } socket.on('disconnect', function() { var socketIndex = connectionsArray.indexOf(socket); console.log('socket = ' + socketIndex + ' disconnected'); if (socketIndex >= 0) { connectionsArray.splice(socketIndex, 1); } }); console.log('有新的客户端连接!'); connectionsArray.push(socket);});var updateSockets = function(data) { // 加上最新的更新时间 data.time = new Date(); // 推送最新的更新信息到所以连接到服务器的客户端 connectionsArray.forEach(function(tmpSocket) { tmpSocket.volatile.emit('notification', data); });
};下面我们要做的就是把MySQL这边一张表数据的更新实时的推送到客户端,比如MySQL这边表的数据abc变成123了,那使用程序就会把最新的123推送到每一个连接到服务器的客户端。如果服务器的连接的客户端为0,也就是这时候没有客户端连接,那程序也不会执行推送信息的代码以免产生不必要的资源消耗,当有客户端连上的时候又开始推送。demo的代码大家可以到下面的Download按钮去下载。
要运行首先我们要安装nodejs要用到的mysql模块:
$ npm install mysql
更多关于mysql模块的使用请访问:https://github.com/felixge/node-mysql
再安装Socket.io模块:
$ npm install socket.io
更多关于socket.io模块的使用请访问:http://socket.io/
新建数据库nodejs,表articles(也可以把表建在你现有的的数据库上,修改一下相应的源代码):
CREATE DATABASE `nodejs`CHARACTER SET utf8 ;USE `nodejs`;SHOW DATABASES;USE `nodejs`;CREATE TABLE `nodejs`.`articles`(`title` TEXT , `author` TEXT ,`description` TEXT);
进入nodejs-push-MySQL目录运行demo:
$ node server.js
测试效果:
- 打开浏览器输入http://localhost:8080 (可以多开几个,明显能感觉到实时的推送效果)
- 使用MySQL工具登录到MySQL数据库,修改数据库nodejs里面articles表的数据
- 一旦表数据被保存,那些打开的客户端将收到最新的更改
client.html源代码:
<html><head><!-- * 更多demo: http://www.cxy808.com * 新浪微博: http://weibo.com/cxy808--><title>使用Nodejs实现实时推送MySQL数据库最新信息到客户端</title><style>dd,dt {float:left;margin:0;padding:5px;clear:both;display:block;width:100%;}dt {background:#ddd;}time {color:gray;}</style></head><body> <time></time> <div id="container">Loading ...</div> <script src="socket.io/socket.io.js"></script> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> // 创建websocket连接 var socket = io.connect('http://localhost:8080'); // 把信息显示到div上 socket.on('notification', function (data) { var articlesList = "<dl>"; $.each(data.articles,function(index,article){ articlesList += "<dt>" + article.title + "</dt>\n" + "<dd>" + article.author + "\n" + "<dd>" + article.description + "\n" "</dd>"; }); articlesList += "</dl>"; $('#container').html(articlesList); $('time').html('最后更新时间:' + data.time); }); </script> </body></html>
server.js源代码:
// 更多demo: http://www.cxy808.com// 新浪微博: http://weibo.com/cxy808//建立MySQL连接, 根据自己环境修改相应的数据库信息var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'), mysql = require('mysql'), connectionsArray = [], connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'root', database: 'nodejs', port: 3306 }), POLLING_INTERVAL = 1000, pollingTimer;// 检查数据库连接是否正常connection.connect(function(err) { // 不出现错误信息,那表示数据库连接成功 console.log(err);});//启动HTTP服务,绑定端口8080app.listen(8080);// 加载客户端首页function handler(req, res) { fs.readFile(__dirname + '/client.html', function(err, data) { if (err) { console.log(err); res.writeHead(500); return res.end('加载客户端首页发生错误...'); } res.writeHead(200); res.end(data); });}/* * 这个就是实现主要功能的方法,间隔3秒去查询数据库表,有更新就推送给客户端 */var pollingLoop = function() { // 查询数据库 var query = connection.query('SELECT * FROM articles'), articles = []; // 用于保存查询结果 // 查询结果监听 query .on('error', function(err) { // 查询出错处理 console.log(err); updateSockets(err); }) .on('result', function(user) { // 加入查询到的结果到articles数组 articles.push(user); }) .on('end', function() { // 检查是否有客户端连接,有连接就继续查询数据库 if (connectionsArray.length) { pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); updateSockets({ articles: articles }); } });};// 创建一个websocket连接,实时更新数据io.sockets.on('connection', function(socket) { console.log('当前连接客户端数量:' + connectionsArray.length); // 有客户端连接的时候才去查询,不然都是浪费资源 if (!connectionsArray.length) { pollingLoop(); } socket.on('disconnect', function() { var socketIndex = connectionsArray.indexOf(socket); console.log('socket = ' + socketIndex + ' disconnected'); if (socketIndex >= 0) { connectionsArray.splice(socketIndex, 1); } }); console.log('有新的客户端连接!'); connectionsArray.push(socket);});var updateSockets = function(data) { // 加上最新的更新时间 data.time = new Date(); // 推送最新的更新信息到所以连接到服务器的客户端 connectionsArray.forEach(function(tmpSocket) { tmpSocket.volatile.emit('notification', data); });};
0 0
- 使用Nodejs实现实时推送MySQL数据库最新信息到客户端
- nodejs实现百度实时推送
- NodeJS实现WebSocket前端和服务器通信,实时推送
- 使用SignalR实时推送数据库变化--车辆实时跟踪
- 使用goEasy实现web消息实时推送
- 使用GoEasy实现web实时推送
- 实现服务器推送消息到客户端ServerPush
- nodejs向客户端推送消息
- nodejs+sequelize同步模型到mysql数据库
- WebSocket和kafka实现数据实时推送到前端
- 实时推送--GoEasy实现
- Nodejs实现简单爬虫,将爬到的数据以json数据格式保存到MySQL数据库中
- android通过xmpp实现服务器到客户端的推送功能
- Pushlet实现消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端【
- 使用Pushlet将消息从服务器端推送到客户端【原创】
- 使用Pushlet将消息从服务器端推送到客户端
- The type javax.el.ELResolver cannot be resolved. It is indirectly referenced from required .class fi
- MD5加密
- 黑马程序员——Java的IO流学习
- Unity 3D 4.5.1和4.5.2 for Mac的安装与破解方法
- 全自动软化水设备:全自动软化水设备优化能力概述
- 使用Nodejs实现实时推送MySQL数据库最新信息到客户端
- auditd
- hdu 4018 字符串
- 茶叶蛋与电脑
- 并发网系列文章集
- 和为s的两个数字
- Unity里的协程Coroutines
- 复制字符串4
- PMOS 和 NMOS的区别