【发布时间】:2015-10-03 19:54:50
【问题描述】:
我正在尝试在表格中显示我的数据库中的结果。我希望用户在不刷新页面的情况下实时查看表中所做的每项更改(插入、更新或删除)。
我的第一个问题是如何在这样的表中获取我的数据库数据。我还希望其他用户可以生动地看到用户执行的操作(例如编辑、删除、创建)。
这是我的 server.js
var io=require('socket.io'), mysql=require('mysql');
var express = require('express');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'lolast'
});
connection.connect(function(err) {
if(err) {
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 2000);
}
});
var ws=io.listen(3000);
var socketCount = 0
ws.on('connection', function(socket) {
socketCount++
// Let all sockets know how many are connected
ws.emit('users connected', socketCount);
socket.on('disconnect', function() {
// Decrease the socket count on a disconnect, emit
socketCount--
ws.emit('users connected', socketCount)
});
});
这是我的客户端:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>
<script>
$(document).ready(function(){
// Connect to our node/websockets server
var socket = io.connect('http://localhost:3000');
// New socket connected, display new count on page
socket.on('users connected', function(data){
$('#usersConnected').html('Users connected: ' + data)
})
})
</script>
<div id="usersConnected"></div>
我的用户计数器工作正常,实时显示结果,但我的 sql 数据有问题。
如果有人帮助我,我会非常高兴。
【问题讨论】:
-
MySQL 不会在数据更改时“通知”其他客户端。为此,您要么必须进行一些轮询,并且有办法决定发生了什么变化(可能是某种
last_updated列),要么直接在您的应用程序中创建一些事件系统,其中更新数据库的客户端将触发一个事件来告诉其他人重新加载一些东西。 -
这是一个相当困难的问题,MySQL 对此并没有开箱即用的支持。我认为 Firebase 擅长于此? Mongo 可能会更好,并且可能还有其他中间件解决方案。自己动手的解决方案是像建议的 jkavalik 一样进行手动轮询。这是扩展的噩梦,如果没有认真的 MySQL 印章,你不会走得太远。
标签: javascript mysql node.js