Skip to content

Instantly share code, notes, and snippets.

@beautyfree
Created December 14, 2011 08:43
Show Gist options
  • Save beautyfree/1475769 to your computer and use it in GitHub Desktop.
Save beautyfree/1475769 to your computer and use it in GitHub Desktop.
server.js
#!/usr/bin/env node
var net = require("net"),
sys = require("util"),
socketFile = "/tmp/node-socket";
var io = require('socket.io').listen(8003);
io.set('log level', 1);
io.set('resource','/api');
var sessions = {},
SESSION_TIMEOUT = 60 * 1000;
function createSession (id, key) {
if (sessions[id] && sessions[id].key == key) return null;
var session = {
key: key,
timestamp: new Date(),
poke: function () {
session.timestamp = new Date();
},
destroy: function () {
delete sessions[session.id];
}
};
sessions[id] = session;
return session;
}
// Интервал для убийства старых сессий
setInterval(function () {
var now = new Date();
for (var id in sessions) {
if (!sessions.hasOwnProperty(id)) continue;
var session = sessions[id];
if (now - session.timestamp > SESSION_TIMEOUT) {
session.destroy();
}
}
}, 1000);
// Связь node + php
console.log('Listening on socket ' + socketFile);
net.createServer(function (stream) {
stream.setEncoding("utf8");
stream.on("connect", function () {
//console.log('Connect from client!');
});
stream.on("data", function (data) {
var json = JSON.parse(data);
switch(json.event) {
case 'join':
createSession(json.id,json.key);
break;
case 'notify':
io.sockets.in(json.to).emit('message', json);
break;
default:
}
console.log('From php: ' + data);
});
}).listen(socketFile);
// Связь node + user
io.sockets.on('connection', function (socket) {
socket.on('join', function (data) {
if(data.key && data.id && sessions[data.id] && sessions[data.id].key == data.key)
socket.join(data.id)
});
socket.on('disconnect', function () {
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment