2016-08-09 7 views
1

User1とUser2の2人のユーザーが登録されていて、両方がシステムにログインしているとしたら、User1はUser2にメッセージを送信します。 User2の接続、およびUser2がUser1のにメッセージを送りたいとき、私は、これはUser1が接続されていないその通知得るが、それらの両方のユーザーが接続されている、Nodejsはオーナーのメッセージ送信者にメッセージを送信することができます

  • User1は自分だけ
  • にメッセージを送信することができません
  • User2は自分自身にメッセージを送ることができます

しかし、彼らは他のユーザーにメッセージを送信できませんでした

var socket  = require('socket.io'), 
    express  = require('express'), 
    app   = express(), 
    server  = require('http').createServer(app), 
    io   = socket.listen(server), 
    port  = process.env.PORT || 3000, 
    redis  = require("redis"), 
    redisClient = redis.createClient(); 

var io_redis = require('socket.io-redis'); 
io.adapter(io_redis({host: 'localhost', port: 6379})); 

require('sticky-socket-cluster/replace-console')(); 

var options = { 
    workers  : require('os').cpus().length, 
    first_port : 8000, 
    proxy_port : 3000, 
    session_hash: function (req, res) { 
     return req.connection.remoteAddress; 
    }, 

    no_sockets: false 
}; 

require('sticky-socket-cluster')(options, start); 

function start(port) { 

    io.sockets.on('connection', function (socket) { 
     socket.on('login', function (data) { 
      console.log(data.username); 
      login(data.username, data.password, function (success, value) { 
       if (success) { 
        redisClient.exists(data.username, function (err, doesExist) { 
         if (err) return; 

         if (!doesExist) { 
          redisClient.set(data.username, socket.id, function (err, res) { 
           redisClient.set(data.username, socket.id); 
          }); 
         } 
         else { 
          redisClient.del(data.username); 
          redisClient.set(data.username, socket.id, function (err, res) { 
           redisClient.set(data.username, socket.id); 
          }); 
         } 

        }); 
        socket.emit('login', {result: true, id: value}); 
       } else { 
        socket.emit('login', {result: false}); 
       } 
      }); 
     }); 

     socket.on('requestMoney', function (data) { 

      redisClient.get(data.fromUsername, function (err, socketId) { 
       if (io.sockets.connected[socketId]) { 
        log.info('message to '+ data.fromUsername + ' sent'); 
        io.sockets.connected[socketId].emit('message', {message: 'Hey !!'}); 
       } else { 
        log.info(data.fromUsername + ' NOT Login'); 
       } 
      }); 

     }); 
    }); 

    server.listen(port, function() { 
     console.log('Express and socket.io listening on port ' + port); 
    }); 
} 
+0

についてのことをもっと知りたい@Tomああ男!あなたの場合の問題は何ですか? –

答えて

1

問題は

代わりの

io.sockets.connected[socketId].emit('')); 

私はこのコードを使用する解決:

socket.broadcast.to(socketId).emit('')); 

今私ができますspにメッセージを送るecificログインしているユーザーをAndroidにウェブからのユーザーとAndroidデバイスからWebまで誰にもユーザー

私のHTMLテストコードを記録している

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title> 
     Document 
    </title> 
    </meta> 
    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#login').click(function() { 
       socket.emit('login', {username: 'mahdi', password: 'a'}); 
      }); 

      $('#mesage').click(function() { 
       socket.emit('requestMoney', {fromUsername: 'a'}); 
      }); 
     }); 
    </script> 
    <script> 
     var socket = new io.connect('http://192.168.1.35:3000', { 
      transports: ['websocket'] 
     }); 
     socket.on('connect', function() { 
      console.log('connected!'); 
     }); 
     socket.on('message', function (message) { 
      console.log("hello ::::::::" + message); 
     }); 
     socket.on('success', function (data) { 
      console.log(data); 
     }); 
    </script> 
</head> 
<body> 
<h3 id="login">login</h3> 

<h3 id="mesage">mesage</h3> 
</body> 
</html> 
関連する問題