Socket.io pour la vérification des mises à jour de la base de données
J'ai un node.js le serveur qui se connecte à une base de données mysql et ouvre un nouveau socket à l'aide d'une douille.io. Le rôle de ce serveur est essentiellement à informer tout client (utilisateur) qui se connecte à elle quand il y a un nouveau message pour l'utilisateur dans la table de base de données. Le code ci-dessous ne fonctionne que si le client explicitement émet un " check_messages la demande. Comment puis-je modifier de sorte que le client est celui qui est prévenu à chaque nouveau message est inséré dans la table mysql pour que l'utilisateur à la place du client ayant explicitement émettent un " check_messages la demande?
var app = require('http').createServer().listen(8124);
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'some username',
password : 'some password',
database : 'some database'
});
connection.connect();
console.log('Server running at http://127.0.0.1:8124/');
var io = require('socket.io').listen(app);
var prev_id = 0;
io.sockets.on('connection', function (socket) {
socket.emit('greeting', 'Hello');
socket.on('check_messages',function(data){
var uid = data['uid'];
var q = "SELECT * FROM messages WHERE user_id=" + uid + " ORDER BY id DESC LIMIT 1";
connection.query(q, function(err, rows, fields) {
if (err) throw err;
if (rows[0].id > prev_id){
socket.emit('new_message',rows[0]);
prev_id = rows[0].id
}
});
});
});
Salut, est-ce que votre problème a été résolu? Et Comment? Merci.
OriginalL'auteur Nirav Bhatia | 2013-05-10
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas le faire toute interrogation sur la base de données vous pouvez utiliser la base de données postgresql qui soutiennent listen/notify.
Vous serez informé immédiatement quand il y a une modification sur la table.
Exemple de mise en œuvre
OriginalL'auteur
Vous pouvez exécuter votre code dans du programmateur gestionnaire d'événements sur le serveur.
Le code ci-dessous vérifie la base de données pour les nouveaux messages toutes les 5 secondes et émet de l'événement si nécessaire
Comme alternative, je pense que vous pourriez mettre en œuvre le message queueing utilisation de redis avec le fast node_redis client. Il a intégré dans pubsub sémantique.
Regarder Redis. Il est rapide NoSQL valeur-clé de stockage que vous pouvez utiliser pour organiser message rapide à arriver. Utilisation node_redis mnp module de communiquer avec elle. Lire ce référence
Je pense que vous devriez mettre en œuvre le message queueing utilisation de redis avec le fast node_redis client. Il a intégré dans pubsub sémantique.
Pouvez-vous donner plus de détails? Désolé, je suis nouveau sur le nœud et de ses modules.
regardez redis.io Redis est rapide NoSQL key-value store que vous pouvez utiliser pour organiser message rapide à arriver. utilisation node_redis (github.com/mranney/node_redis) mnp module de communiquer avec elle. Lisez ce stackoverflow.com/questions/4441798/...
Je pense qu'il n'est pas efficace pour interroger toutes les 5 secondes. signalrjs devrait être plus efficace. npmjs.com/package/signalrjs
OriginalL'auteur