【问题标题】:how to get socket id of connected users如何获取已连接用户的套接字 ID
【发布时间】:2016-05-20 13:53:20
【问题描述】:

我对所有登录用户都有一个唯一的令牌,现在我想当第三方服务器在找到令牌数组的令牌后连接我的套接字时,如果该令牌可用,我必须在那之后通过点击 Web 服务来获取文本消息我必须使用套接字发射函数向该用户发送数据,该用户哪个令牌匹配,但我也需要该用户套接字 ID。如何找到每个登录用户的套接字 ID? 并使用令牌将消息发送到该套接字 id。

var bodyParser = require("body-parser");
var bcrypt = require('bcrypt');
var urlEncodedParser = bodyParser.urlencoded({extended: false});
var session = require('client-sessions');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var request = require('request');
var utils = require('utility');
app.use(bodyParser.text());
 var token_array = new Array();
require('array.prototype.find');


app.use(session({
  cookieName: 'usersession',
  secret: '0GB2ZbiKBtz2flRPvlJZ9EtczCewBxXK',
 duration: 24 * 60 * 60 * 1000, // how long the session will stay valid in ms
  activeDuration: 1000 * 60 * 5
}));

.................................................. .........................

app.post("/login", urlEncodedParser, function(req, response)
           {

                var body = req.body;
                console.log(req.body);
                var userData={
                    "deviceToken" : "AbcDE1234567",
                    "password" : body.pwd,
                    "username" : body.username
                };
                var digest = utils.hmac("sha1", "A12AA418-1F28-4464-8B67-29CBD02BC45C-F048B14F-F3E3-4F97-A522-F2275A364A0E", JSON.stringify(userData));
                var postData = {
                    "deviceToken" : "AbcDE1234567",
                    "password"    : body.pwd,
                    "username"    : body.username,
                    "digest"      : digest
                };

                var sPostData = utils.base64encode(utils.base64encode(JSON.stringify(postData)));
                request({
                    url: "http://201.196.6.218:8080/BACKSTAFF/service/authenticate/",
                    method: "POST",
                    headers: {
                        "content-type": "application/json",
                    },
                    body: sPostData
                },
                function(err,result,body){
                    //console.log(JSON.stringify(postData));

                    var body = JSON.parse(body);
                //  console.log(typeof body);
                    //console.log(body.token);
                    req.usersession.token = body.token;
                    token_array.push(body.token);
                    req.usersession.alltoken= token_array
                    //console.log(token_array);
                    response.redirect(301, '/contacts');
                }); 


            });



io.on('connection', function(socket){
  socket.on('push', function(msg_id,token){
      console.log(token_array);
 // console.log(token_array.find('244d6575-fc60-4815-a331-274a24d65a95'));

   Array.prototype.contains = function(elem)
{
for (var i in this)
{
if (this[i] == elem) return true;
}
return false;
}

if (token_array.contains('66a1fd91-86d6-4884-b483-167ca5ff005f'))
{

    var msgData={

                    "messageID" : msg_id,
                     "token" : token

                };
    var digest = utils.hmac("sha1", "A12AA418-1F28-4464-8B67-29CBD02BC45C-F048B14F-F3E3-4F97-A522-F2275A364A0E", JSON.stringify(userData));

    var msgPostData = {

        "token" : token,
        "messageID" : msg_id,
        "digest" :digest

    };
        var msgencodeData = utils.base64encode(utils.base64encode(JSON.stringify(postData)));
                request({
                    url: "http://201.196.6.218:8080/BACKSTAFF/service/getTextMessage/",
                    method: "POST",
                    headers: {
                        "content-type": "application/json",
                    },
                    body: msgencodeData
                },
                function(err,result,body){
                    //console.log(JSON.stringify(postData));

                    var body = JSON.parse(body);
                    var message = body.message;
                    socket.emit('push', message);
                }); 






}
else
{
console.log('no');  
}

   // io.emit('chat message', msg);
  });

});

.................................................. ......

【问题讨论】:

    标签: node.js sockets express


    【解决方案1】:

    如果您想跟踪套接字(例如通过令牌),您应该将它们保存在一个对象中。因此,当客户端连接时,您将套接字保存在对象中,如下所示:

    var clientObj = {};
    
    io.on('connection', function(socket){
      clientObj[token] = socket;
      ...
    }
    

    然后你可以像这样发射到套接字:

    io.to(clientObj[token]).emit('something', 'some message');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2015-07-06
      • 2021-10-27
      • 2011-02-22
      • 2014-10-01
      • 1970-01-01
      • 2021-08-21
      相关资源
      最近更新 更多