私は自分のチャット アプリケーションでユーザー プレゼンスに socket.io を使用していましたが、数か月後にファイアウォール、CPU パフォーマンス、メモリに関する多くの問題を発見し、sockjs について多くの良い洞察を聞きました。これらのコードをソケットから変換する方法を知りたいです。 .io から sockjs へ、または socket.io や sockjs 以外の手法がある場合
var app = require('express')(),
redis = require('redis'),
client = redis.createClient(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
server.listen(844);
io.enable('browser client minification'); // send minified client
io.enable('browser client etag');
io.enable('browser client gzip'); // gzip the file
io.set('log level', 1); // reduce logging
io.set('transports', [
' websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'
]);
io.sockets.on('connection', function (socket) {
socket.on('join', function (userid, hello) {
socket.set('userid', userid);
socket.userId = userid;
var userco = userid + ":connects";
var usercostat = userid + ":stats";
var userhashy = userid + ":userhash";
client.get(userhashy, function (err, replay) {
if (replay === hello) {
console.log("tam el tatabok");
client.get(usercostat, function (err, reply) {
if (reply !== "only me") {
console.log("not only me ");
client.incr(userco);
io.sockets.emit("add-user", {
id: userid
});
} else {
console.log("only me ");
io.sockets.emit("remove-user", {
id: socket.userId
});
}
});
} else {
return false;
}
});
});
socket.on('disconnect', function (userid) {
socket.get('userid', function (err, userid) {
var userco = userid + ":connects";
client.get(userco, function (err, reply) {
if (reply > 0) {
console.log("akbar men 0");
client.decr(userco);
}
});
setTimeout(function () {
client.get(userco, function (err, reply) {
if (reply < 1) {
console.log("hanshelo");
io.sockets.emit("remove-user", {
id: socket.userId
});
}
});
}, 2000);
});
});
});
sockjs に移行するときに直面した主な問題は、socket.set や socket.get のようなものが必要です。ユーザー ID があるので、ユーザーが接続を開いたり閉じたりするときにそれを使用できます