我已经看过很多大气的例子,包括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解析.看一下这个样本:
让我知道它是怎么回事(在这里或在atmosphere-framework@googlegroups.com)
谢谢
– Jeanfrancois