Saltar al contenido

ID de cliente personalizado de Socket.io

Nuestro grupo especializado pasados algunos días de investigación y de recopilar de datos, han obtenido la respuesta, esperamos que todo este artículo sea de utilidad para tu plan.

Solución:

Puedes crear un array en el servidor y almacenar objetos personalizados en él. Por ejemplo, podría almacenar la identificación creada por Socket.io y una identificación personalizada enviada por cada cliente al servidor:

var util = require("util"),
    io = require('/socket.io').listen(8080),
    fs = require('fs'),
    os = require('os'),
    url = require('url');

    var clients =[];

    io.sockets.on('connection', function (socket) 

        socket.on('storeClientInfo', function (data) 

            var clientInfo = new Object();
            clientInfo.customId         = data.customId;
            clientInfo.clientId     = socket.id;
            clients.push(clientInfo);
        );

        socket.on('disconnect', function (data) 

            for( var i=0, len=clients.length; i

en este ejemplo, debe llamar storeClientInfo de cada cliente.


Espero que esto ayude.

Para establecer una identificación de socket personalizada, se debe sobrescribir la función generateId. Ambos eio y engine accesorios de Socket.ioservidor El objeto se puede utilizar para administrar esta operación.

Un ejemplo sencillo:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

io.engine.generateId = function (req) 
    // generate a new custom id here
    return 1


io.on('connection', function (socket) 
    console.log(socket.id); // writes 1 on the console
)

Parece ser que ha sido manejado.

Debe tenerse en cuenta que la identificación del socket debe ser impredecible ¡y un valor único considerando la seguridad y las operaciones de la aplicación!

Extra: Si socket.id se devuelve como undefined por tus intensos procesos en tu generateId método, async/await combinación se puede utilizar para superar este problema en node.js versión 7.6.0 y posteriores.
handshake método de node_modules/engine.io/lib/server.js El archivo debe cambiarse de la siguiente manera:

Actual:

// engine.io/lib/server.js

Server.prototype.generateId = function (req) 
  return base64id.generateId();
;

Server.prototype.handshake = function (transportName, req) 
  var id = this.generateId(req);
  ...

nuevo:

// function assignment

io.engine.generateId = function (req) 
  return new Promise(function (resolve, reject) 
    let id;
    // some intense id generation processes
    // ...
    resolve(id);
  );
;


// engine.io/lib/server.js

Server.prototype.handshake = async function (transportName, req) 
  var id = await this.generateId(req);
  ...

Nota: En Engine.io v4.0, generateId El método aceptaría una devolución de llamada. Así que no sería necesario cambiar handshake método. Solo generateId el reemplazo del método será suficiente. Por ejemplo:

io.engine.generateId = function (req, callback) 
  // some intense id generation processes
  // ...
  callback(id);
;

En el socket.io más nuevo (versión 1.x) puedes hacer algo como esto

socket  = io.connect('http://localhost');

socket.on('connect', function() 
    console.log(socket.io.engine.id);     // old ID
    socket.io.engine.id = 'new ID';
    console.log(socket.io.engine.id);     // new ID
);

Si eres capaz, tienes el poder dejar una sección acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *