Socket.io: GenerateId ne fonctionne pas sur 3x

Créé le 23 nov. 2020  ·  5Commentaires  ·  Source: socketio/socket.io

Je veux:

  • [x] signaler un bogue
  • [ ] demander une fonctionnalité

Comportement actuel

Lors de la définition de io.engine.generateId dans la version 2.3.0, les identifiants de socket sont définis en conséquence.
En 3x (testé sur 3.0.0 et 3.0.3) ils ne le sont pas.

Étapes à reproduire

Dans 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();
}

Comportement attendu

Comme dans la version 2.3.0, le format attendu des identifiants de socket devrait être, dans ce cas, "xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", étant x alphanumérique. Au lieu de cela, j'obtiens le format d'identifiant de socket par défaut.

Installer

  • OS : Windows 10, fonctionnant sur Node.js
  • version socket.io : 3.0.0 et 3.0.3

Autres informations (par exemple, stacktraces, problèmes connexes, suggestions de résolution)

Aucune erreur n'est générée, le format n'est tout simplement pas défini.

question

Tous les 5 commentaires

Oui, c'est prévu.

Voici le commit associé : https://github.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15

Ainsi, la méthode generateId fonctionne toujours dans la v3, mais elle n'affectera désormais que le paramètre de requête sid , pas l'attribut id du socket.

Puis-je vous demander quel est votre cas d'utilisation ?

Oh d'accord! Merci pour l'info.

Je réutilisais le id pour le transmettre à d'autres clients pour les appels vidéo en utilisant peer.js, mais peer.js n'aime pas son format.

Mais je viens de voir dans le commit que vous avez mentionné que je ne devrais pas faire cela pour des raisons de sécurité, donc je suppose que je peux clore ce problème.

Merci!

Je pense que ce problème devrait être rouvert (ou un nouveau problème créé), car dans la version 3.0, il ne semble pas que la fonction generateId soit jamais appelée. Je comprends qu'il ne remplace plus la propriété socket.id, mais le commentaire précédent de @darrachequesne suggère qu'il modifie une propriété différente.

Cependant, conformément à la documentation, procédez comme suit :

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 fonction n'est jamais invoquée.

@BrianHVB Je pense qu'il y a une faute de frappe dans votre exemple de code :

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

Pourriez-vous s'il vous plaît confirmer que cela résout le problème?

@darrachequesne - Oups, oui, c'est

Cette page vous a été utile?
0 / 5 - 0 notes