下面我们要做的就是把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源代码:

使用Nodejs实现实时推送MySQL数据库最新信息到客户端

dd,dt {

float:left;

margin:0;

padding:5px;

clear:both;

display:block;

width:100%;

}

dt {

background:#ddd;

}

time {

color:gray;

}

Loading ...

// 创建websocket连接

var socket = io.connect('http://localhost:8080');

// 把信息显示到div上

socket.on('notification', function (data) {

var articlesList = "

$.each(data.articles,function(index,article){

articlesList += "

" + article.title + "\n" +

"

" + article.author + "\n" +

"

" + article.description + "\n"

"

";

});

articlesList += "

";

$('#container').html(articlesList);

$('time').html('最后更新时间:' + data.time);

});

//建立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服务,绑定端口8080

app.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);

});

};

nodejs mysql数据推送_使用Nodejs实现实时推送MySQL数据库最新信息到客户端相关推荐

  1. java获取mysql数据定时执行_详解SpringBoot 创建定时任务(配合数据库动态执行)...

    序言:创建定时任务非常简单,主要有两种创建方式:一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库 ...

  2. swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用

    swift通知栏推送 by Neo Ighodaro 由新Ighodaro 如何使用Swift使用推送通知构建食品交付应用 (How to build a food delivery app with ...

  3. MySQL数据打标_易打标(标签条码打印软件)

    [b]软件名称:[/b][url=http://www.veryhuo.com/down/html/197360.html][color=black]易打标(标签条码打印软件) v3.6.100 官方 ...

  4. 易语言mysql数据同步程序_易语言mssql和mysql数据自动同步源码

    易语言mssql和mysql数据自动同步源码 易语言mssql和mysql数据自动同步源码 系统结构:RefreshTask,ComputeEndTime,ComputeOneTime,Compute ...

  5. php使用mysql怎么连接浏览器_一个简单的php实现的MySQL数据浏览器

    一个简单的php实现的MySQL数据浏览器 更新时间:2007年03月11日 00:00:00   作者: 这个程序可以用来浏览MySQL中的数据,您可以稍做修改就可以做出很不错的MySQL浏览器. ...

  6. mysql 数据日志分析_基于mysql数据库的日志分析系统

    现如今,日志已经成为了我们分析系统及相关服务的一个重要工具.而日志也具有其相对较为固定的格式以便于进行统计查询.其大致格式如下: 日期时间            主机            进程[pi ...

  7. 查看mysql数据插入时间_[译] MySQL 最佳实践 —— 高效插入数据

    Get the dolphin up to speed - Photo by JIMMY ZHANG on Unsplash[1] 当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到 ...

  8. mysql 数据增量抽取_通过Maxwell实时增量抽取MySQL binlog并通过stdout展示

    下载,解压Maxwell 修改MySQL的配置文件my.cnf [root@hadoop000 etc]# vi my.cnf [mysqld] server-id = 1binlog_format= ...

  9. 服务端mysql数据存储设计_服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索引...

    改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 基本索引类型 MySQL 索引可以 ...

最新文章

  1. 科大讯飞语音引擎_科大讯飞的1024:语音技术进一步突破,发布专用芯片
  2. OFDM技术及其应用
  3. Facebook图片存储架构技术全解析
  4. python treemap_使用TreeMap
  5. jsencrypt代码分析——openssl的rsa加密解密在js的实现
  6. 《嵌入式系统项目分析入门与实践》 读后感(1)
  7. 简述linux开机启动进程,Linux系统启动流程简述
  8. RNN系列之四 长期依赖问题
  9. 解决plsqldev连接oracle数据库出现ORA-12154:TNS:无法解析指定的连接标识符
  10. 《信息管理学基础》——娄策群(第二版)第一章答案
  11. Python地理数据处理 十三:栅格数据处理(一)
  12. C++内部链接与外部链接
  13. Web Dynpro for ABAP ( 四 ) BPM系统的连接
  14. 运行webdriver时启动不了浏览器
  15. 很是惆怅,不知如何看待自己智能车竞赛获奖结果
  16. Oracle和MySQL的数据类型
  17. 手机通过QQ发送图片到电脑端,电脑接收不到且显示图裂
  18. php实现批量导出pdf 压缩打包下载
  19. C++ Parent和Child继承分析
  20. 绩效管理的目的和目标

热门文章

  1. 抖音否认封杀腾讯;程序员拒绝带电脑回家被开除,获赔 19.4 万;Excel 具备图灵完备性 | 极客头条...
  2. 更高效地利用 Jupyter+pandas 进行数据分析,6 种常用数据格式效率对比!
  3. JavaScript 造就年薪超过 10 万美元的开发者们!
  4. 针对金融级交易场景的严苛技术要求,如何修炼这门“必修课”?
  5. 主链 100 强榜单出炉, XRP 竟与比特币比肩; 以太坊每周产生 1248 种新代币 | 数据周榜...
  6. 看动画轻松理解「链表」实现「 LRU 缓存淘汰算法」
  7. 8 个 Linux 下 ls 命令的高级用法!个个惊艳!
  8. 北上广等一线城市 IT 岗位已接近饱和?
  9. 马化腾入选《财富》领袖50强;微博出海布局AI;Android手机爆发病毒 | 一周业界事...
  10. 被小程序冲击的人,请正视小程序!