Diseño de un server push usando netty

en mi segunda pregunta sobre netty. Recién estamos comenzando con eso. Y tenemos un diseño donde necesitamos usar HTTP con sondeo largo Transmisión HTTP. Estamos estimando de 5k a 50k usuarios conectados con una conexión abierta. Sabemos que Tomcat no se manejará, por lo que revisamos a Netty para realizar la tarea.

El diseño debería ser lo suficientemente simple, pero no podemos usar websockets (nos encantaría usar hornetQ encima de netty con soporte websocket/stomp) pero no podemos.

Entonces, básicamente, tendremos eventos de envío de servidor (incluso podemos usar JS SSE para hacerlo) en los clientes conectados.

Los clientes se suscribirán a un punto final basado en una URL (como una cola en JMS, aunque mucho más simple)

Entonces tendremos un proceso en el lado del servidor que genera eventos y notifica a los canales interesados ​​(estamos usando un patrón de observador simple para esto).

Entonces, un canal se suscribe a esos procesos y luego recibe eventos de ellos.

Mi pregunta aquí hoy es ver si el enfoque de diseño que usamos es el correcto considerando la arquitectura de netty.

public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
    service.subscribe(this);
    this.context = ctx;
    ctx.sendUpstream(e);
}

//this method gets called by the service when a server event happens
public void onUpdate(String message) {
  ChannelBuffer buffer = Channels.buffer(message.getBytes().length());
  buffer.writeBytes(message.getBytes());
  ChannelFuture future = Channels.future(this.context.getChannel());
  future.addListener(ChannelFutureListener.CLOSE);
  Channels.write(this.context,future,buffer);
}

saludos

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

Se ve bien, pero no hay mucho allí. ¿Cómo está manejando el inicio de la encuesta larga y el posible tiempo de espera posterior? (O tal vez eres totalmente bueno con eso... esto no es la inquisición española)

Una cosa que podría considerar, según el número y la popularidad de su "Colas de URL"es usar un Grupo de canales como contenedor para todos los canales suscritos a esa cola de URL. De esa manera, puedes simplemente escribir el mensaje al grupo. Además, cuando los canales se cierren, serán expulsados ​​del grupo, por lo que hay algo de simplificación de código allí.

Además, ¿ha considerado HTTP Streaming? En mi opinión, no es tan bueno como los websockets, pero es mejor que un sondeo largo.

No estoy 110 % seguro de que todas las implementaciones sean perfectas, pero he elaborado una proyecto de prueba que demuestra JSON push usando netty para sondeos largos, websockets y transmisión de http. También hay un cliente javascript que se adapta al tipo de inserción que seleccione. Puede que le resulte útil (y estaré encantado de recibir comentarios al respecto...).

respondido 26 nov., 16:22

Muchas gracias por las ideas. El código está muy simplificado. Necesito agregar más limpieza :). Lo siento, mi error, en realidad estoy considerando la transmisión de http no mucho sondeo, en el cliente abriremos la conexión y seguiremos leyendo. Verificaré el proyecto, podría obtener algunas buenas ideas de él. - Vinicius Carvalho

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