Javascript 来自MySQL的节点JS实时结果

Javascript 来自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.

我试图在表中显示数据库的结果。我希望用户在不刷新页面的情况下实时查看表中的每一项更改(插入、更新或删除)

我的第一个问题是如何像这样获取表中的DB数据。我还希望用户所采取的行动能够从其他用户那里生动可见(如编辑、删除、创建)

这是我的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>

$(文档).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初创公司的经验提出这些主张)

我正在使用firebase获取实时事件,以更改数据库中的值。 对于视图透视图,我将firebase与Bootstrap的DataTable挂钩。 你可以在这里查看它的小用途。Firebase是最好的解决方案之一。
答案是mysql上的复制日志或bin日志。看看这个repo:

MySQL不会在数据更改时“通知”其他客户端。为此,你要么做一些轮询,并有办法决定更改了什么(可能是某种
上次更新的
专栏),要么直接在你的应用程序中创建一些事件系统,更新数据库的客户机将触发一个事件,告诉其他人重新加载某些内容。这是一个相当困难的问题,MySQL对此没有现成的支持。我想Firebase专门做这个?Mongo可能会更好,而且可能还有其他中间件解决方案。滚动您自己的解决方案是像建议的jkavalik那样进行手动轮询。这是一场噩梦,如果没有认真的MySQL操作,你不会走得很远。