氛围:如何取消订阅广播

时间:2014-11-10 17:02:58

标签: jersey atmosphere

简单的问题,您如何取消订阅来自Java API的广播?我在API中找不到任何突出的东西,我在谷歌上找不到任何东西。

Stack:Java 7,Atmosphere 2.2.3,Atmosphere-Jersey 2.2.3,Servlet 3,Tomcat 7

这就是我订阅的方式:

@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);
    }
}

1 个答案:

答案 0 :(得分:3)

在客户端js / jquery上,您可以调用unsubscribe方法来关闭连接。

socket.unsubscribe(request);

在服务器端,您可以使用AtmosphereResource close方法取消订阅用户。注意您可以尝试注入AtmosphereResourceFactory以访问所有的atmosphereResource连接。

@Inject
private AtmosphereResourceFactory resourceFactory;

然后找到唯一的UUID并关闭连接

resourceFactory.find(userUUID).close();