Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
¿Qué importa si hay muchos oyentes emisores de nodejs?

Estoy escribiendo una aplicación de servidor TCP usando NodeJS. Sin embargo, cada socket se ejecuta en un proceso secundario separado (server.on("conexión")). Para enviar mensajes a clientes específicos, utilicé Emitter, y cada socket genera su propio oyente (en clientID). Entonces, si hay 10000 dispositivos conectados, la aplicación creará 10000 oyentes. Esto se ve terrible. ¿Qué peligros supondrá esto? No puedo encontrar una solución para enviar un mensaje de un cliente a otro en el protocolo TCP escribiendo código NodeJS. Actualización: ¿Tiene alguna idea de enviar un mensaje a un cliente específico sin agregar oyentes personalizados?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Sin embargo, cada socket se ejecuta en un proceso separado.

¿Por qué harías eso? La idea central detrás de NodeJS es ejecutar cosas en un ciclo de eventos. Hilo único, sí, pero asíncrono.

Esto se ve terrible. ¿Qué peligros supondrá esto?

Es terrible. El mayor problema es que sacrificas muchos recursos. No solo genera miles de procesos, sino que también genera muchos emisores. Entonces, en primer lugar, esto significa que se consume mucha RAM. En segundo lugar, esto significa un rendimiento degradado debido al cambio de contexto del proceso, que normalmente es más lento que el cambio de espacio del usuario. Suponiendo que su máquina incluso le permita generar tantos procesos.

No puedo encontrar una solución para enviar un mensaje de un cliente a otro en el protocolo TCP escribiendo código NodeJS.

Supongo que tiene un servidor TCP, dos clientes conectados y el cliente A quiere enviar un mensaje al cliente B. ¿Es correcto? TCP por sí solo no hará eso por ti. Necesitas algún protocolo encima. Por ejemplo:

  1. El cliente se conecta al servidor. En este punto, el cliente no ha iniciado sesión y no puede hacer nada excepto la autenticación.
  2. El cliente autentica. Envía (username, password) par al servidor. El servidor valida el par. El servidor mantiene una asignación global {"<username>": [sockets]} y agrega un cliente recién autenticado a esa asignación.
  3. El cliente A quiere enviar un mensaje al cliente B. Entonces envía datos de la forma {"type": "direct", "destination": "clientB", "data": "hello B"} . El servidor analiza el mensaje y lo reenvía al cliente apropiado (tomado del mapeo global).

En caso de que desee transmitir el mensaje que envía, diga {"type":"broadcast", "data": "hello all"} tipo de mensaje. Luego, el servidor lo analiza, recorre todos los clientes conectados (que se encuentran en el mapeo global) y reenvía el mensaje a cada cliente.

Por supuesto, también necesita algunos marcos de paquetes. Dado que TCP es un flujo, realmente no comprende los mensajes y dónde comienza uno y termina el otro. Volcar cosas a JSON es la mitad del problema. Porque luego tienes que enviar este JSON a través de la red y el otro lado tiene que saber cuántos bytes tiene que leer. Una forma es prefijar cada mensaje con, digamos, 2 bytes que le dicen al otro lado cuánto dura el mensaje.

Por cierto, es posible que desee considerar usar socket.io (o alguna otra biblioteca) que se encargue de algunos de esos tediosos detalles por usted.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!