【问题标题】:socket.io server and android clientsocket.io 服务器和安卓客户端
【发布时间】:2016-09-05 09:46:20
【问题描述】:

我有一个带有套接字 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, '***); 

我的服务器基本上是这样做的:当客户端连接并发送数据时,它会接收数据并将其答案插入到表中......我有一个计时器,它每秒检查一次表并查看是否有任何数据任何客户端(如果有)它使用 emit 将该数据发送给用户,然后 .当连接一个客户端时,一切正常,但是: 当多个客户端连接到服务器时,发出的东西有时就像它有时会为磨损的客户端发送数据一样工作,有时它会正确发送它客户端真的很简单,我确定它不是客户端我在这里错过了什么?或者更好的解决方案是什么?

【问题讨论】:

    标签: android node.js socket.io server


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2012-03-31
      • 2016-03-20
      • 1970-01-01
      • 2020-04-07
      • 2016-04-23
      相关资源
      最近更新 更多