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í:
- La conexión entrante se suspenderá, por lo que no podrá enviar nada al servidor, excepto cuando se reanude por transmisión;
- Cualquier uso de
InputStream
dará como resultado el bloqueo de E / S, lo que de alguna maneraInputStream
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:
Avísame cómo funciona (aquí o en [email protected])
Gracias
- Jeanfrancois