Estoy escribiendo un juego para un gamejam (de tamaño limitado).
Quiero crear una tabla de clasificación y la forma más fácil de almacenar las entradas se basaría en el socket.id del jugador.
¿Puedo hacerlo con seguridad o existe la posibilidad de que se le vuelva a dar a un jugador en el futuro?
Además, ¿debo mantenerlo en secreto o estoy seguro de enviarlo a los clientes como parte de la tabla de clasificación? (es decir, ¿puede un jugador aleatorio usar esta identificación para interferir con el jugador legítimo con la identificación de la tabla de clasificación?)
Un socket.id dura solo la duración de una sesión determinada de socket.io. Una futura conexión socket.io del mismo cliente recibirá un nuevo socket.id . Como tal, NO es un identificador duradero y, por lo tanto, no creo que sea muy útil para una tabla de clasificación porque no necesariamente atribuiría múltiples puntajes del mismo usuario (en diferentes sesiones) al mismo usuario. En su lugar, desearía un identificador de usuario duradero que cree su propio servidor (generalmente como parte de un proceso de registro/inicio de sesión del usuario) y puede asegurarse a largo plazo de que sea único y que el mismo cliente obtenga el mismo identificador cada vez.
En cuanto a cuán único es un socket.id , se acuña a través de la generación de números aleatorios. Utiliza el módulo base64id para crear la identificación única y el documento para ese módulo dice que usa crypto.randomBytes() . Puedes ver la implementación aquí .
Entonces, con la generación de números aleatorios, es probabilísticamente único, no garantizado único. A primera vista, en el módulo base64id, parece que agrega un número creciente a los bytes aleatorios en algunas circunstancias, lo que podría garantizar que sea único durante la vida útil del servidor (sin reinicios del servidor) suponiendo que no se renueven los dígitos crecientes, pero aún así no mantendrá la misma identificación para el mismo cliente en diferentes sesiones.
debería mantenerse en privado
Se crea/asigna un socket.id en el servidor, por lo que no hay posibilidad de que un cliente intente suplantar o usar el socket.id de otro usuario. Como tal, no hay ninguna razón particular para mantenerlo en privado. Es solo una identificación única que socket.io usa para la contabilidad interna para realizar un seguimiento del estado de una conexión determinada.
Si alguna vez ha mirado un socket.id, no está especialmente diseñado para el consumo humano y/o para mostrarse en una interfaz de usuario. Es una cadena de base64 que se verá como un galimatías para la mayoría de los usuarios habituales si se muestra en una tabla de clasificación. Más comúnmente, un usuario especificaría su propio "nombre para mostrar" cuando se suscribió a su servicio y lo usaría en una tabla de clasificación y lo usaría como identificador persistente de una sesión a la siguiente.