Jersey 气氛:如何取消订阅广播
简单的问题是,如何从JavaAPI取消订阅广播?我在API中找不到任何突出的东西,在Google上也找不到任何突出的东西 堆栈:Java7、Atmosphere 2.2.3、Atmosphere Jersey 2.2.3、Servlet 3、Tomcat7 我就是这样订阅的:Jersey 气氛:如何取消订阅广播,jersey,atmosphere,Jersey,Atmosphere,简单的问题是,如何从JavaAPI取消订阅广播?我在API中找不到任何突出的东西,在Google上也找不到任何突出的东西 堆栈:Java7、Atmosphere 2.2.3、Atmosphere Jersey 2.2.3、Servlet 3、Tomcat7 我就是这样订阅的: @Path("subscription") public class CurrencyPairSubscription { @GET @Suspend @Path("{pair}") pu
@Path("subscription")
public class CurrencyPairSubscription {
@GET
@Suspend
@Path("{pair}")
public Broadcastable subscribeToQuote(@PathParam("pair") String pair,
@Context final BroadcasterFactory broadcasterFactory) {
return new Broadcastable(broadcasterFactory.lookup(pair, true));
}
}
public class BroadcasterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() {
System.out.println("Broadcast Servlet init");
AtmosphereFramework framework = (AtmosphereFramework) getServletContext()
.getAttribute("AtmosphereServlet");
MetaBroadcaster metaBroadcaster = framework.metaBroadcaster();
metaBroadcaster.scheduleTo(RandomQuoteGenerator.generate()
.getIdentifier(), RandomQuoteGenerator.retrieveLastQuote(), 15,
TimeUnit.MILLISECONDS);
}
}
这就是我的广播方式:
@Path("subscription")
public class CurrencyPairSubscription {
@GET
@Suspend
@Path("{pair}")
public Broadcastable subscribeToQuote(@PathParam("pair") String pair,
@Context final BroadcasterFactory broadcasterFactory) {
return new Broadcastable(broadcasterFactory.lookup(pair, true));
}
}
public class BroadcasterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() {
System.out.println("Broadcast Servlet init");
AtmosphereFramework framework = (AtmosphereFramework) getServletContext()
.getAttribute("AtmosphereServlet");
MetaBroadcaster metaBroadcaster = framework.metaBroadcaster();
metaBroadcaster.scheduleTo(RandomQuoteGenerator.generate()
.getIdentifier(), RandomQuoteGenerator.retrieveLastQuote(), 15,
TimeUnit.MILLISECONDS);
}
}
在客户端js/jquery上,您可以调用
unsubscribe
方法来关闭连接
socket.unsubscribe(request);
在服务器端,您可以使用AtmosphereResource方法取消订阅用户。注意,您可以尝试插入AtmosphereSourceFactory
以访问所有AtmosphereSource连接
@Inject
private AtmosphereResourceFactory resourceFactory;
然后找到唯一的UUID并关闭连接
resourceFactory.find(userUUID).close();
看起来我不需要在服务器端取消订阅,只需让客户端处理即可。是这样吗?是的,通常由客户端取消订阅。