java jersey jax-rs atmosphere

java - Conversación bidireccional Atmosphere/Jersey



jax-rs (1)

He visto varios ejemplos de Atmosphere, incluido pub-sub. Quiero hacer algo como pub-sub (el cliente se suscribe a un canal que es exclusivo de ese cliente, el servidor publica periódicamente en ese canal), excepto que el cliente también enviará datos al servidor. El cliente enviará datos en respuesta a los datos enviados por el servidor y en otros casos cuando algo importante sucede en el cliente que el servidor necesita saber (que el servidor no necesita confirmar).

¿Es posible hacer esto con Atmosphere?

Puede parecerse a esto:

@Stateless @Path("/id/{clientId}/key/{clientKey}") public class MyService { @POST @Produces("application/xml") @Consumes("application/xml") @Suspend public StreamingOutput subscribe(@PathParam("clientId") String clientId, @PathParam("clientKey") String clientKey, @Context Broadcaster broadcaster, InputStream body) { if (!authenticate(clientId, clientKey) { throw new WebApplicationException(401); } broadcaster.setID(clientId); // Do something here... Not sure what } }

Pero hay un par de problemas aquí:

  1. La conexión entrante se suspenderá, por lo que no podrá enviar nada al servidor, excepto cuando se reanude por transmisión;
  2. Cualquier uso de InputStream dará como resultado el bloqueo de E / S, lo que de alguna manera InputStream el propósito de usar Atmosphere.

Ambos problemas se pueden resolver simplemente eliminando @Suspend , pero luego estoy en la situación de hilo por conexión.

Tengo la sensación de que Atmosphere no será la tecnología adecuada aquí y quizás deba hacer algo un poco más bajo. Pero no estoy seguro de cómo hacerlo. Ideas?

Editar:

No puedo encontrar una manera directa de analizar XML de forma asincrónica de todos modos, por lo que todo esto se parece menos a algo que se puede hacer de forma asincrónica.


Salut,

acaba de emitir un Llamado para ejecutar su análisis XML asíncrono. Eche un vistazo a esta muestra:

Feed de Twitter

Avísame cómo funciona (aquí o en [email protected])

Gracias

- Jeanfrancois