Socket.io: GenerateId no funciona en 3x

Creado en 23 nov. 2020  ·  5Comentarios  ·  Fuente: socketio/socket.io

Yo quiero:

  • [x] informar un error
  • [] solicitar una función

Comportamiento actual

Al configurar io.engine.generateId en v2.3.0, los identificadores de socket se configuran en consecuencia.
En 3x (probado en 3.0.0 y 3.0.3) no lo son.

pasos para reproducir

En Node.js:

const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const { v4: uuidv4 } = require('uuid');

io.engine.generateId = function (req)
{
    return uuidv4();
}

Comportamiento esperado

Como funciona en v2.3.0, el formato esperado de los ID de socket debe ser, en este caso, "xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", siendo x alfanumérico. En su lugar, obtengo el formato de identificación de socket predeterminado.

Configuración

  • SO: Windows 10, que se ejecuta en Node.js
  • Versión de socket.io: 3.0.0 y 3.0.3

Otra información (p. Ej., Seguimiento de pila, problemas relacionados, sugerencias de cómo solucionarlo)

No se arrojan errores, simplemente no se establece el formato.

question

Todos 5 comentarios

Sí, eso se espera.

Aquí está el compromiso relacionado: https://github.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15

Por lo tanto, el método generateId todavía funciona en v3, pero ahora solo afectará al parámetro de consulta sid , no al atributo id del socket.

¿Puedo preguntar cuál es su caso de uso?

¡Ah, vale! Gracias por la info.

Estaba reutilizando id para transmitirlo a otros clientes para videollamadas usando peer.js, pero a peer.js no le gusta su formato.

Pero acabo de ver en el compromiso que mencionaste que no debería estar haciendo esto por razones de seguridad, así que supongo que puedo cerrar este problema.

¡Gracias!

Creo que este problema debería reabrirse (o crearse un nuevo problema), ya que en la versión 3.0, no parece que se haya llamado a la función generateId. Entiendo que ya no reemplaza la propiedad socket.id, pero el comentario anterior de @darrachequesne sugiere que está cambiando una propiedad diferente.

Sin embargo, según la documentación, haga lo siguiente:

const content = require('fs').readFileSync(__dirname + '/index.html', 'utf8');

const httpServer = require('http').createServer((req, res) => {
  // serve the index.html file
  res.setHeader('Content-Type', 'text/html');
  res.setHeader('Content-Length', Buffer.byteLength(content));
  res.end(content);
});

const io = require('socket.io')(httpServer);
io.engine.generateId((req) => {
  console.log('This line is never executed');
  return new Date().valueOf().toString()
});

io.on('connection', socket => {
  console.log('connect');
  console.log(socket.sid);
});

httpServer.listen(3000, () => {
  console.log('go to http://localhost:3000');
});

La función nunca se invoca.

@BrianHVB Creo que hay un error tipográfico en su ejemplo de código:

io.engine.generateId = ((req) => {
  console.log('This line is never executed');
  return new Date().valueOf().toString()
});

¿Podría confirmar que soluciona el problema?

@darrachequesne - Vaya, sí, eso es

¿Fue útil esta página
0 / 5 - 0 calificaciones