Socket.io: GenerateId tidak berfungsi pada 3x

Dibuat pada 23 Nov 2020  ·  5Komentar  ·  Sumber: socketio/socket.io

Aku ingin:

  • [x] laporkan bug
  • [ ] meminta fitur

Perilaku saat ini

Saat menyetel io.engine.generateId di v2.3.0, id soket disetel sesuai.
Dalam 3x (diuji pada 3.0.0 dan 3.0.3) tidak.

Langkah-langkah untuk mereproduksi

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

Perilaku yang diharapkan

Saat bekerja di v2.3.0, format yang diharapkan dari id soket harus, dalam hal ini, "xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", menjadi x alfanumerik. Sebagai gantinya saya mendapatkan format id soket default.

Mendirikan

  • OS: Windows 10, berjalan di Node.js
  • versi socket.io: 3.0.0 dan 3.0.3

Informasi lain (mis. stacktrace, masalah terkait, saran cara memperbaikinya)

Tidak ada kesalahan yang terjadi, formatnya tidak disetel.

question

Semua 5 komentar

Ya, itu yang diharapkan.

Inilah komit terkait: https://github.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15

Jadi, metode generateId masih berfungsi di v3, tetapi sekarang hanya akan memengaruhi parameter kueri sid , bukan atribut id dari soket.

Bolehkah saya bertanya apa kasus penggunaan Anda?

Oh baiklah! Terimakasih atas infonya.

Saya menggunakan kembali id untuk mengirimkannya ke klien lain untuk panggilan video menggunakan peer.js, tetapi peer.js tidak menyukai formatnya.

Tapi saya baru saja melihat di komit yang Anda sebutkan bahwa saya tidak boleh melakukan ini karena alasan keamanan, jadi saya kira saya bisa menutup masalah ini.

Terima kasih!

Saya pikir masalah ini harus dibuka kembali (atau masalah baru dibuat), seperti pada versi 3.0, tampaknya fungsi generateId tidak pernah dipanggil. Saya mengerti bahwa itu tidak lagi menggantikan properti socket.id, tetapi komentar @darrachequesne sebelumnya menunjukkan bahwa itu mengubah properti yang berbeda.

Namun, sesuai dokumentasi, lakukan hal berikut:

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');
});

Fungsi tidak pernah dipanggil.

@BrianHVB Saya pikir ada kesalahan ketik dalam contoh kode Anda:

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

Bisakah Anda mengonfirmasi bahwa itu memperbaiki masalah?

@darrachequesne - Ups, ya, memang begitu. Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

thebinarypenguin picture thebinarypenguin  ·  4Komentar

Aweather picture Aweather  ·  4Komentar

adammw picture adammw  ·  4Komentar

gCurtisCT picture gCurtisCT  ·  4Komentar

dmuth picture dmuth  ·  3Komentar