仅向特定客户广播

时间:2018-12-07 14:24:26

标签: java jax-rs broadcast server-sent-events

在我的Java后端中,我有一个sse服务器,您可以从该服务器进行订阅,并在每次发生新事件时收到消息。 现在我有以下问题: 当多个客户端订阅该服务时,每个客户端都将参与广播。我需要的是每个客户端仅接收自己的相应消息。我可以实现过滤器,但我认为这不是一个干净的解决方案。我已经根据本文档9.4节构建了套接字。

https://download.oracle.com/otn-pub/jcp/jaxrs-2_1-final-eval-spec/jaxrs-2_1-final-spec.pdf?AuthParam=1544191825_609299bad8b1e89d33f86f976380483c

我想Java不会为每个请求创建一个新类,因为类是单例。如何管理服务器仅将特定于客户端的消息广播到客户端,而不是将所有消息广播到所有客户端? 提前致谢。

这是我的代码:

    @Singleton
@Path("/messageReceiver")
public class SubscriptionReceiver  extends HttpServlet {
    private SseBroadcaster broadcaster = new SseBroadcaster();

    @POST
    @Path("/{projectId}")
    @Produces(MediaType.TEXT_PLAIN)
    @Consumes(MediaType.TEXT_PLAIN)
    public String broadcastMessage(@PathParam("projectId") String projectId, String message) {
        OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
        message = message + "\n\n";
        OutboundEvent event = eventBuilder//.name("message")
                .mediaType(MediaType.TEXT_PLAIN_TYPE)
                .data(String.class, message)
                .build();

        broadcaster.broadcast(event);

        return "Message was '" + message + "' broadcast.";
    }

    @GET
    @Path("/{projectId}")
    @Produces(SseFeature.SERVER_SENT_EVENTS)
    public EventOutput listenToBroadcast(@PathParam("projectId") String projectId) {

        EventOutput eventOutput = new EventOutput();
        this.broadcaster.add(eventOutput);
        return eventOutput;
    }
}

0 个答案:

没有答案