Javascript 来自MySQL的节点JS实时结果
我试图在表中显示数据库的结果。我希望用户在不刷新页面的情况下实时查看表中的每一项更改(插入、更新或删除) 我的第一个问题是如何像这样获取表中的DB数据。我还希望用户所采取的行动能够从其他用户那里生动可见(如编辑、删除、创建) 这是我的server.jsJavascript 来自MySQL的节点JS实时结果,javascript,mysql,node.js,Javascript,Mysql,Node.js,我试图在表中显示数据库的结果。我希望用户在不刷新页面的情况下实时查看表中的每一项更改(插入、更新或删除) 我的第一个问题是如何像这样获取表中的DB数据。我还希望用户所采取的行动能够从其他用户那里生动可见(如编辑、删除、创建) 这是我的server.js var io=require('socket.io'), mysql=require('mysql'); var express = require('express'); var connection = mysql.
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>
$(文档).ready(函数(){
//连接到我们的节点/websockets服务器
var socket=io.connect('http://localhost:3000');
//已连接新插座,在第页显示新计数
socket.on('users connected')函数(数据){
$('#usersConnected').html('已连接的用户:'+数据)
})
})
我的用户计数器工作正常,在live中显示结果,但我的sql数据有问题
如果有人帮助我,我会非常高兴。这是一个不完整的答案,但至少可以让你开始解决这个问题-
- MySQL对此没有任何现成的支持。无论您做什么,都需要基于轮询,这不是不可能扩展的,但需要非常智能地使用MySQL才能很好地扩展
- 有更好的存储产品。我认为Firebase专门从事这一领域(被谷歌收购?),我肯定有一款AWS产品可以做到这一点
- 甚至像Redis这样的NoSQL也有推送支持。我想MongoDB是的
- 可能还有其他中间件解决方案。可能会有一些框架来创建和维护表本身。尝试搜索与语言无关的框架或其他语言中的框架,看看是否有什么东西能为您指明正确的方向
- roll your own的解决方案看起来是这样的:所有应该对其他用户可见的查询都需要进入表中,或者在表中保持跟踪,并带有时间戳,您的客户机可以查询自上次接收数据以来的任何内容。如果不使用MySQL,这很难扩展(但如果您熟悉MySQL,那么扩展是合理的)。(我只是根据自己在MySQL初创公司的经验提出这些主张)
答案是mysql上的复制日志或bin日志。看看这个repo:MySQL不会在数据更改时“通知”其他客户端。为此,你要么做一些轮询,并有办法决定更改了什么(可能是某种
上次更新的专栏),要么直接在你的应用程序中创建一些事件系统,更新数据库的客户机将触发一个事件,告诉其他人重新加载某些内容。这是一个相当困难的问题,MySQL对此没有现成的支持。我想Firebase专门做这个?Mongo可能会更好,而且可能还有其他中间件解决方案。滚动您自己的解决方案是像建议的jkavalik那样进行手动轮询。这是一场噩梦,如果没有认真的MySQL操作,你不会走得很远。