Теперь я знаю, что MemCache не работает так, как я изначально планировал, но я по-прежнему не могу передавать данные, специфичные для пользователя (например, идентификатор член, который входит в систему) между PHP и узлом.Как отправить пользовательские данные между PHP и узлом с помощью MemCache или Redis
Я до сих пор только установил Memcache, но смог установить Redis, если это то, что мне нужно, но мне нужен способ идентификации каждого зарегистрированного пользователя на основе данных сеанса или файла cookie как на узле, так и на Apache (PHP), когда они подписываются.
Я бы предпочел не использовать общий идентификатор сеанса, который затем используется для ссылки на базу данных, но я буду, если должен.
Это был, как я хранил в PHP
$memcache = new Memcache;
$memcache->connect('localhost',11211);
$uData = json_encode($_SESSION);
$memcache->set('Session',$uData);
Это был мой первоначальный узел файл, который, очевидно, должен быть существенно изменен, так как я понял возможности MemCache в.
/*****************************************
* 1. Configuration
* 2. Declarations & Definitions
* 3. Memcache & Session Vars
* 4. Server Initiation
* 5. Client Connections
* 5-1. On Client Connect
* 6. Helper Functions
* 7. Utility Functions
*****************************************/
/*****************************************
* 1. Configuration
*****************************************/
// Basic config options
var NodePortNumber = 1337; // t3h 13370rz
var MemCachePortNumber = 11211; // default MemCache port is 11211
var MySQLParams = {
'Host': 'localhost',
'User': 'user',
'Pass': 'pass',
'DB': 'database'
};
/*****************************************
* 2. Declarations & Definitions
*****************************************/
var Express = require('express')();
var HTTP = require('http').Server(Express);
var IO = require('socket.io')(HTTP);
var MySQL = require('mysql');
var Database = MySQL.createConnection({
host : MySQLParams.Host,
user : MySQLParams.User,
password : MySQLParams.Pass,
database : MySQLParams.DB
});
/*****************************************
* 3. Memcache & Session Vars
*****************************************/
var MemCache, Session;
// Define a default value for all Session values so undefined warnings aren't thrown for non-members
Session = [];
Session['MemberID'] = 0;
Session['MemberEmail'] = undefined;
Session['MemberPass'] = undefined;
// Get session vars from Memcache
var Memcached = require('memcached');
MemCache = new Memcached('127.0.0.1:'+MemCachePortNumber); // connect to local memcached
MemCache.get('Session', function(err,result){
Session = JSON.parse(result);
});
/*****************************************
* 4. Server Initiation
*****************************************/
// Initiate the Node server
HTTP.listen(NodePortNumber, function(){
console.log('Server created. Socket listening on Port '+NodePortNumber);
});
/*****************************************
* 5. Client Connections
*****************************************/
var LiveClientCounter = 0; var Members = {};
var IsMember = false;
// Event fired every time a new client connects:
IO.sockets.on('connection', function (client) {
/*****************************************
* 5-1. On Client Connect
*****************************************/
var clientID = client.id;
LiveClientCounter++;
IO.emit('connection count', LiveClientCounter);
console.log('Member '+Session['MemberID'] +' connected');
if (typeof Session['MemberID'] != typeof undefined && Session['MemberID'] > 0) {
IsMember = true;
if (typeof Members[Session['MemberID']] == typeof undefined)
Members[Session['MemberID']] = [];
Members[Session['MemberID']][clientID] = {
SocketOBJ: client,
ClientID: clientID,
MemberID: Session['MemberID']
};
console.log('Key added for Member #'+Session['MemberID']);
}
});
Не могли бы вы добавить пример того, как передавать эти данные? Я думал о переменной GET, но, похоже, было бы лучше. – SISYN