Socket.io: GenerateId لا يعمل على 3x

تم إنشاؤها على ٢٣ نوفمبر ٢٠٢٠  ·  5تعليقات  ·  مصدر: socketio/socket.io

أريد أن:

  • [x] أبلغ عن خطأ
  • [] طلب ميزة

السلوك الحالي

عند تعيين io.engine.generateId في الإصدار 2.3.0 ، يتم تعيين معرفات المقبس وفقًا لذلك.
في 3x (تم اختباره في 3.0.0 و 3.0.3) فهي ليست كذلك.

خطوات التكاثر

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

سلوك متوقع

أثناء العمل في الإصدار 2.3.0 ، يجب أن يكون التنسيق المتوقع لمعرفات المقبس ، في هذه الحالة ، "xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ، x أبجدي رقمي. بدلاً من ذلك ، أحصل على تنسيق معرف المقبس الافتراضي.

يثبت

  • نظام التشغيل: Windows 10 ، يعمل على Node.js
  • إصدار socket.io: 3.0.0 و 3.0.3

معلومات أخرى (مثل stacktraces والمشكلات ذات الصلة واقتراحات كيفية الإصلاح)

لم يتم طرح أي أخطاء ، لم يتم تعيين التنسيق ببساطة.

question

ال 5 كومينتر

نعم ، هذا متوقع.

إليك الالتزام ذي الصلة: https://github.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15

لذلك ، لا تزال طريقة generateId تعمل في الإصدار 3 ، لكنها ستؤثر الآن فقط على معلمة الاستعلام sid ، وليس السمة id للمقبس.

هل لي أن أسأل ما هي حالة استخدامك؟

حسنا! شكرا للمعلومة.

كنت أعيد استخدام id لإرساله إلى عملاء آخرين لإجراء مكالمات فيديو باستخدام peer.js ، لكن peer.js لا يحب تنسيقه.

لكنني رأيت للتو في الالتزام أنك ذكرت أنه لا ينبغي أن أفعل ذلك لأسباب أمنية ، لذلك أعتقد أنه يمكنني إغلاق هذه المشكلة.

شكرا!

أعتقد أنه يجب إعادة فتح هذه المشكلة (أو إنشاء إصدار جديد) ، كما هو الحال في الإصدار 3.0 ، لا يبدو أنه يتم استدعاء وظيفة createId على الإطلاق. أفهم أنه لم يعد يحل محل الخاصية socket.id ، لكن التعليق السابق darrachequesne يشير إلى أنه يغير خاصية مختلفة.

ومع ذلك ، وفقًا للوثائق ، قم بما يلي:

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

لا يتم استدعاء الوظيفة أبدًا.

BrianHVB أعتقد أن هناك خطأ مطبعي في مثال التعليمات البرمجية الخاصة بك:

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

هل يمكنك التأكيد على أنه يعمل على حل المشكلة؟

darrachequesne - عفوًا ، نعم ، هذا

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات