Hi i'm implementing simple socket by your code, but from android i cant check login
my login function and socket work fine without using Cluster, could you help me?
var express = require('express'),
cluster = require('cluster'),
net = require('net'),
sio = require('socket.io'),
mysql = require('mysql'),
sio_redis = require('socket.io-redis');
var port = 3000,
num_processes = require('os').cpus().length;
var connection = mysql.createConnection(
{
host : 'localhost',
user : 'root',
password : 'a',
database : 'shoot',
multipleStatements: true
});
if (cluster.isMaster) {
var workers = [];
var spawn = function (i) {
workers[i] = cluster.fork();
workers[i].on('exit', function (worker, code, signal) {
console.log('respawning worker', i);
spawn(i);
});
};
// Spawn workers.
for (var i = 0; i < num_processes; i++) {
spawn(i);
}
var worker_index = function (ip, len) {
var s = '';
for (var i = 0, _len = ip.length; i < _len; i++) {
if (!isNaN(ip[i])) {
s += ip[i];
}
}
return Number(s) % len;
};
var server = net.createServer({pauseOnConnect: true}, function (connection) {
var worker = workers[worker_index(connection.remoteAddress, num_processes)];
worker.send('sticky-session:connection', connection);
}).listen(port);
} else {
// Note we don't use a port here because the master listens on it for us.
var app = new express();
// Here you might use middleware, attach routes, etc.
// Don't expose our internal server to the outside.
var server = app.listen(0, 'localhost'),
io = sio(server);
io.adapter(sio_redis({host: 'localhost', port: 6379}));
process.on('message', function (message, connection) {
if (message !== 'sticky-session:connection') {
return;
}
server.emit('connection', connection);
connection.resume();
});
io.on('login', function (data) {
login(data.username, data.password, function (success, value) {
if (success)
redisClient.set(data.username, socket.id);
socket.emit('login', {result: success, id: value});
});
});
}
function login(username, password, callback) {
var query = "SELECT * FROM users WHERE username = ?";
connection.query(query, [username], function (err, results) {
if (err) return callback(false);
if (results.length === 0) return callback(false);
var user = results[0];
if (!bcrypt.compareSync(password, user.password)) {
return callback(false);
}
callback(true, {
id: user.id.toString(),
});
});
}
Hi i'm implementing simple socket by your code, but from android i cant check login
my login function and socket work fine without using Cluster, could you help me?