2015-10-03 19 views
3

我試圖從表中顯示我的DB的結果。我希望用戶在不刷新頁面的情況下查看錶中所做的每項更改(插入,更新或刪除)。來自MySQL的節點JS實時結果

我的第一個問題是如何取得我這樣的表格中的數據庫數據。我還希望用戶採取的行動能夠從其他用戶生動地看到(如編輯,刪除,創建)。

enter image description here

這是我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數據有問題。

如果有人幫我,我會非常棒。

+1

當數據改變時,MySQL不會「通知」其他客戶端。爲此,您必須進行一些輪詢並具有決定更改內容的方法(某種'last_updated'列可能),或者直接在您的應用程序中創建一些事件系統,其中更新數據庫的客戶端將觸發事件以告訴其他人重新載入內容。 – jkavalik

+0

這是一個相當困難的問題,MySQL並不完全具備對此的開箱即用支持。我認爲Firebase專注於此? Mongo可能會更好,可能還有其他中間件解決方案。自己的解決方案是建議像jkavalik一樣進行手動輪詢。這是一個惡夢,如果沒有嚴重的MySQL排版,你不會走得太遠。 – djechlin

回答

1

這是一個不完整的答案,但至少可以讓你開始對這個問題 -

  • MySQL沒有任何形式的這種亂的開箱即用支持。無論你做什麼都需要基於輪詢,這是不可能擴展的,但需要非常聰明地使用MySQL來很好地擴展。
  • 有更好的存儲產品。我認爲Firebase專門從事這項工作(由Google購買?),我認爲有一個AWS產品可以做到這一點。
  • 即使像Redis這樣的NoSQL也有推送支持。我認爲MongoDB的確如此。
  • 可能還有其他中間件解決方案。可能有框架會自行創建和維護表。嘗試在其他語言中搜索與語言無關的框架或框架,看看是否有任何東西指向正確的方向。
  • roll-your-own解決方案看起來像這樣:其他用戶應該可以看到的所有查詢都需要放入表格中,或者用表格跟蹤,並帶有時間戳,以便客戶查詢因爲他們上次收到數據以來的任何事這是規模沒有嚴重的MySQL排序(但如果你知道MySQL的話,可以合理擴展)。 (只是從我在MySQL啓動時的經驗中提出這些聲明)。