Nodejs: muchas solicitudes de clientes a través de un socket

Escenario: tengo muchos clientes (páginas web, a través de Socket.io) que se conectan a un servidor Node.js (llámalo A). El servidor actúa como una aplicación "proxy" para otro servicio (Node.js también) para esos clientes, llamemos al servicio B. En la práctica, las páginas hablan con el servicio B usando el proxy. Estoy tratando de entender si podría tomar UN solo socket abierto del servidor A al servicio B, solo para obtener rendimiento y recursos (en la primera conexión de cliente en el servidor A, el servidor abrirá el socket a B y lo mantendrá abierto para que el mensaje fluya bidireccionalmente). Por supuesto, el problema es que sin algún tipo de intervención, los mensajes podrían mezclarse uno sobre otro, lo que resultaría en un lío que el servicio B no puede entender. Soy bastante novato en la programación de sockets y me pregunto si esto es todavía un problema "resuelto", o simplemente la respuesta incorrecta al problema :) Gracias

preguntado el 16 de mayo de 11 a las 18:05

Separaría los mensajes con \ ny luego en B en bucle en un .split ("\ n") ... -

Realmente depende de cómo esté enviando solicitudes de A a B. ¿Podría publicar algún código de ejemplo? -

Ehi Rob, es realmente simple: A y B hablan a través de un socket TCP, por lo que comparten un flujo de datos en el que fluyen los mensajes del cliente y las respuestas relevantes de B. El problema es que los mensajes en el flujo deben ser "envueltos", empaquetados. Ahora estoy usando un simple "protocolo" delimitado "\ n" entonces ... parece funcionar -

Ah, vale. Ahora lo entiendo, pero tengo curiosidad por saber por qué "lanzó su propio" protocolo sobre TCP en lugar de usar un protocolo de nivel superior (como HTTP REST). Usando una conexión TCP sin procesar, si el mensaje que está enviando tiene que estar fragmentado en más de un paquete (un proceso sobre el que no tiene control), su servidor recibirá más de un evento de 'datos' y tendrá que reconstruir el mensaje . -

Sí, de hecho temo a los fragmentos. El problema con HTTP es que el servicio (B) también (por iniciativa propia) enviaría mensajes a los clientes. Algo imperativo y asincrónico (retransmisiones también, si es necesario). Piense en el servicio como un "cerebro" que mastica datos y toma decisiones basadas en los datos. Bastante complicado :/ -

1 Respuestas

Por sus comentarios, parece que se beneficiaría de algo como PubSub de Redis.

Vea http://redis.io/ y específicamente, http://redis.io/commands#pubsub

contestado el 18 de mayo de 11 a las 02:05

Acepto la respuesta porque ya usé Redis pub / sub para otro proyecto mío y tal vez lo use también en este. (ya lo estoy pensando). Gracias :) - Claudio

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.