Atmosphere / Jersey双向对话

时间:2011-11-22 17:01:45

标签: java jersey jax-rs atmosphere

我见过很多大气的例子,包括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的目的。
  3. 这两个问题都可以通过删除@Suspend来解决,但后来我处于每个连接的线程状态。

    我觉得Atmosphere不会成为合适的技术,也许我可能不得不做一些更低级别的事情。但我不知道该怎么做。想法?

    修改

    无论如何,我找不到异步解析XML的简单方法,所以整个事情看起来不像是可以异步完成的事情。

1 个答案:

答案 0 :(得分:2)

萨吕,

只是广播一个Callable来执行异步XML解析。看一下这个样本:

TwitterFeed

让我知道它是怎么回事(在这里或在atmosphere-framework@googlegroups.com上)

由于

- Jeanfrancois