【发布时间】:2014-05-24 11:08:33
【问题描述】:
我正在尝试使用 node.js mysql 和 socket.io 为我的站点创建一个通知系统 我想在页面上为登录用户设置一个传入消息计数器。
我只是使用这个查询实现了它:
$result = $mysqli->query("SELECT COUNT(*) FROM messages WHERE user_get='$MY_ID'");
$row = $result->fetch_row();
$totalm = $row[0]; // всего записей
$result->close();
和输出:
<div class="count"><?=$totalm;?></div>
但这是静态变体,只有在用户更新页面时才会更新。
我想发出实时通知,所以我搬到了 node.js 和 socket.io
现在我有了我的服务器:
var mysql = require('mysql');
var http = require('http');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'lc'
});
var io = require('socket.io').listen(9000);
io.set('log level', 3);
io.sockets.on('connection', function (socket) {
socket.on('addid', function(my_id){
var sql = 'SELECT COUNT(*) AS namesCount FROM messages WHERE user_get ' + connection.escape(my_id) + ' ';
connection.query(sql, function(err, rows) {
if(rows.length > 0) {
socket.user = my_id;
socket.count = rows[0].namesCount;
console.log(socket.count+' has been logined ');
}
});
socket.on( 'notif', function(notif) {
// htmlencode
notif = escapeHtml(notif);
// Unixtime
milliseconds = parseInt(new Date().getTime()/1000);
var post = {user_get: socket.user};
query = connection.query('SELECT COUNT(*) AS namesCount FROM messages WHERE ?', post, function(err, result) {
update = connection.query(sql);
});
console.log(' usersend id: ' +socket.user +' ');
socket.broadcast.to(socket.user).json.emit('incNotif',{'userSend': socket.user, 'notif': socket.count})
});
});
});
还有客户:
$(window).load(function() {
var milliseconds = parseInt(new Date().getTime()/1000);
if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) {
socket = io.connect('http://localhost:9000', {'transports': ['xhr-polling']});
} else {
socket = io.connect('http://localhost:9000',);
}
socket.on('connect', function () {
socket.emit('addid', '<?=$MY_ID;?>'');
socket.on('incNotif', function (notif) {
if(msg.userSend == id) {
$("#mess").append(
"<div class='count'>"+ notif +"</div>"
);
event.preventDefault();
}
});
});
});
没有任何作用。
我对这些技术的了解不够,所以希望你能帮助我。
【问题讨论】:
-
php 代码在 java 中工作,我使用相同的构造 socket.emit('addid', '=$MY_ID;?>'');在我的私人消息系统中
标签: node.js socket.io long-polling