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