大气/泽西岛双向对话

问题描述 投票:2回答:1

我已经看到了很多大气示例,包括pub-sub。我想做类似pub-sub(客户端订阅该客户端唯一的通道;服务器定期发布到该通道)的操作,除了客户端也将数据发送到服务器。客户端将发送数据以响应服务器发送的数据,在其他情况下,当服务器需要知道的重要事件发生在客户端上时(服务器不需要确认)。

甚至有可能通过Atmosphere做到这一点吗?

它可能看起来像这样:

@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
    }
}

但是这里有两个问题:

  1. 传入连接将暂停,因此除非通过广播恢复,否则它将无法向服务器发送任何内容;
  2. InputStream的任何使用都会导致阻塞I / O,这违背了使用Atmosphere的目的。

这两个问题都可以简单地通过删除@Suspend来解决,但是我处于每个连接线程的情况。

我感觉到氛围在这里将不再是合适的技术,也许我可能不得不做些低级的工作。但是我不确定该怎么做。想法?

编辑:

无论如何,我都找不到一种简单的异步解析XML的简单方法,因此,整个过程看起来不太像可以异步完成的事情。

java jersey jax-rs atmosphere
1个回答
2
投票

只需广播一个Callable即可执行异步XML解析。看一下这个示例:

TwitterFeed

© www.soinside.com 2019 - 2024. All rights reserved.