Трансляция только конкретному клиенту - PullRequest
0 голосов
/ 07 декабря 2018

в моем 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;
    }
}
...