我有一个带套接字io和nodejs的套接字服务器和一个android应用程序作为客户端,这里是服务器代码:
var server = require('http').createServer();
var io = require('socket.io')(server);
var UserId;
var RequestCode;
io.sockets.on('connection', function(socket){
socket.on('data', function(data) {
var d = JSON.parse(data);
UserId = d.user_id;
RequestCode = d.request_code;
});
var mj = setInterval(function(){
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '***',
database : '***'
});
connection.connect();
connection.query("SELECT * FROM buffer WHERE user_id = " + UserId + " AND request_code = " + RequestCode + ";"
,function(err, rows, fields) {
for(i = 0; i < rows.length; i++)
{
var jj = rows[i]['pm'];
socket.emit('answer', jj);
executeQuery("DELETE FROM buffer WHERE id = " + rows[i]['id']);
}
});
connection.end();
}, 1000);
});
function executeQuery(sql)
{
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '***',
database : '***'
});
connection.connect();
connection.query(sql);
connection.end();
}
server.listen(8087, '***);
&#13;
我的服务器基本上这样做:当客户端连接并发送数据时,它接收数据并将其答案插入表...我有一个计时器的东西,每秒检查一次表,看看是否有任何数据任何客户端,如果有它使用emit将该数据发送给用户然后。连接一个客户端时一切正常但是: 当多个客户端连接到服务器时,那么emit事件有时就像它有时会为worng客户端发送数据一样,有时它会正确地发送它,客户端非常简单,我确定它不是客户端我在这里缺少什么?或者什么是更好的解决方案?
答案 0 :(得分:0)
我相信创建一系列&#34; userIds&#34;会更好,更一致。并且每当客户端连接到服务器时存储套接字,因为现在userId变量只有一个值,并且每次获得套接字时它都会更改(这可能是您使用查询的时间,但它不是绝对确定它是什么时候。通过创建一个数组,你必须对每个有活动套接字的客户端使用查询。此外,如果您这样做,请记住每次客户端注销时都删除userId。