java – Atmosphere / Jersey双向对话

我已经看过很多大气的例子,包括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
    }
}

但这里有几个问题:

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

这两个问题都可以通过删除@Suspend来解决,但后来我处于线程连接情况.

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

编辑:

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

解决方法:

萨吕,

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

TwitterFeed

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

谢谢

– Jeanfrancois

上一篇:java – 如何对Tomcat上部署的Jersey Web应用程序进行单元测试?


下一篇:Struts2实现文件上传(三)