使用 MySql/Node js 创建通知服务器

Posted

技术标签:

【中文标题】使用 MySql/Node js 创建通知服务器【英文标题】:Create a notification server using MySql/ Node js 【发布时间】:2013-09-05 17:27:54 【问题描述】:

我正在做一个项目,每当触发数据库事件时,我都应该发布通知。

我为此使用 NODE。但是我不确定我是否能够做到。

我遇到了this 关于 SO 的问题,但没有多大帮助。

我还看到了 NODE.js mysql Connectors

我真正的问题是什么:

1) 有没有类似在 Node js 中读取 MySql 触发器的东西。 ?我可以在所需表格中输入一行后立即推送通知吗?

2) 如果是,我应该怎么做?

3) 如果不可能,我必须每隔几秒钟手动检查一次数据库更改,为什么我应该使用 Node.js 而不是每隔几秒钟使用浏览器进行异步调用jQuery?

任何帮助都会得到帮助......!

【问题讨论】:

【参考方案1】:

据我所知,在 Node 中读取数据库触发器没有任何简单的方法,因此一个常见的解决方案是使用 Redis 作为发布系统,并使用连接器模块执行实际的数据库查询。一个非常流行的用于 Node 的 MySQL 连接器是 this 连接器,所以我将使用它作为示例。

在使用模块时,您正在寻找的“MySQL 触发器”只是在大多数异步模块中都能找到的简单回调。下面是一个使用node-mysql 模块的查询示例:

var post  = id: 1, title: 'Hello MySQL';
connection.query('INSERT INTO posts SET ?', post, function(err, result) 
  //the database transaction has completed, notify the client
);

当回调被调用时,这意味着数据库操作要么完成,要么失败(检查回调中的err 属性以检查这一点)。然后,您可以使用 EventSource/Server-Sent EventsWebSockets 将此更改发送到浏览器。

作为对第三个问题的一个侧面回答,将数据从服务器推送到客户端总是比客户端持续请求数据更有效,因为当客户端请求数据时,服务器不能保证有需要的数据。

【讨论】:

我可以在某处获得“node-mysql”的完整文档吗?你能解释一下你写的代码吗?我对 Node JS DB 并不陌生 第三个答案+1..虽然我对前两个解释并不完全满意......所以不接受它作为答案.. 该模块的文档位于 GitHub 页面上,与我的答案中的链接相同。我编写的代码在已建立的数据库连接上执行插入,并在回调中返回结果。

以上是关于使用 MySql/Node js 创建通知服务器的主要内容,如果未能解决你的问题,请参考以下文章

Java游戏服(简单事件通知实现)

使用带有 Javascript 的 MySQL (node.js)

一步一步搭建客服系统 客户列表 - JS($.ajax)调用WCF 遇到的各种坑

找不到模块“mysql”node.js

错误:握手不活动超时(MySQL + Node.js)

使用 socket.io 在 Node.js 中使用 MySql 数据库进行 HTML5 页面日志记录