jafar
4 سال پیش توسط jafar مطرح شد
0 پاسخ

آپدیت کردن فیلد mysql توسط cronjob و ارسال تغییرات توسط socket

با سلام به همه
یه جدول دارم توی mysql که هر ده دقیقه توسط کران جاب آپدیت میشه(فیلد استاتوس من میشه: 1 یا 2 یا 3)
من میخوام فیلد استاتوس رو توسط socket به محض تغییر بفهمم و واسه همه emit کنم
واقعا نمیدونم باید چیکار کنم
البته با تایمر فیلدها رو گرفتم و emit کردم هر یک ثانیه ، ولی احساس میکنم ، این موضوع بار زیادی روی سرور تحمیل میکنه

کد سمت سرور :

var mysql = require("mysql");
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('index.html');
  //res.sendfile('/login/');
});
http.listen(3000, function(){
  console.log('listening on *:3000');
});
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "test"
});

io.on('connection', function (socket) {
    console.log('a client connected');
    setInterval(function(){
      con.query('SELECT * FROM categories',function(err,rows){
        if(err) throw err;
        console.log('Data received from Db:\n');
        console.log(rows);
        socket.emit('showrows', rows);
      });
    }, 1000);
 });

کد سمت کلاینت

<script>
    var socket = io();
    socket.on('connect', function () {
      document.getElementById("socketio").innerHTML = "socket connected";
    });
    socket.on('showrows', function (rows) {
      var html = '';
      for (var i = 0; i < rows.length; i++) {
        html += rows[i].id + ' ' + rows[i].category_name + '<br>';
      }
      document.getElementById("display").innerHTML = html;
      console.log(rows);
    });
  </script>

دوستان بهترین راهکار چیه ؟