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