我见过很多大气的例子,包括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的简单方法,所以整个事情看起来不像是可以异步完成的事情。
答案 0 :(得分:2)
萨吕,
只是广播一个Callable来执行异步XML解析。看一下这个样本:
让我知道它是怎么回事(在这里或在atmosphere-framework@googlegroups.com上)
由于
- Jeanfrancois