socket.io服务器和android客户端

时间:2016-09-05 09:46:20

标签: android node.js socket.io server

我有一个带套接字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;
&#13;
&#13;

我的服务器基本上这样做:当客户端连接并发送数据时,它接收数据并将其答案插入表...我有一个计时器的东西,每秒检查一次表,看看是否有任何数据任何客户端,如果有它使用emit将该数据发送给用户然后。连接一个客户端时一切正常但是: 当多个客户端连接到服务器时,那么emit事件有时就像它有时会为worng客户端发送数据一样,有时它会正确地发送它,客户端非常简单,我确定它不是客户端我在这里缺少什么?或者什么是更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我相信创建一系列&#34; userIds&#34;会更好,更一致。并且每当客户端连接到服务器时存储套接字,因为现在userId变量只有一个值,并且每次获得套接字时它都会更改(这可能是您使用查询的时间,但它不是绝对确定它是什么时候。通过创建一个数组,你必须对每个有活动套接字的客户端使用查询。此外,如果您这样做,请记住每次客户端注销时都删除userId。