Jersey 气氛:如何取消订阅广播

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

简单的问题是,如何从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}")
    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();

看起来我不需要在服务器端取消订阅,只需让客户端处理即可。是这样吗?是的,通常由客户端取消订阅。