1

私は自分のチャット アプリケーションでユーザー プレゼンスに 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 があるので、ユーザーが接続を開いたり閉じたりするときにそれを使用できます

4

0 に答える 0