Я новичок в Atmosphere, поэтому я должен упустить что-то простое. Я сделал образец и могу заставить работать @Broadcast, но не BroadcasterFactory. Я могу отследить попадание onMessage (через прослушиватель), но я не вижу, чтобы onBroadcast происходило, если не указан @Broadcast. Кроме того, если я не укажу @Broadcast, я не увижу сообщение, доставленное клиенту. Мой код WebSocket очень прост:
@Path("/chat")
@AtmosphereService(
interceptors = {AtmosphereResourceLifecycleInterceptor.class,
TrackMessageSizeInterceptor.class/*,
BroadcastOnPostAtmosphereInterceptor.class*/}//,
)
public class HelloWorldWS {
@GET
@Produces(MediaType.APPLICATION_JSON)
public SuspendResponse<String> connect(@Context AtmosphereResource res)
{
// eventually this will be done via subscription in the post area
BroadcasterFactory.getDefault().get().addAtmosphereResource(res);
return new SuspendResponse.SuspendResponseBuilder<String>()
//.broadcaster(BroadcasterFactory.getDefault().get())
.outputComments(true)
.addListener(new ResourceListener())
.build();
}
//@Broadcast(writeEntity = false)
@POST
public void broadcast(String message) {
final String msg = String.format("{'author':'fdsa','message':'%s'}", "Override proof");
// Send to all
BroadcasterFactory.getDefault().get().broadcast(msg);
// No Really, send to all
Collection<Broadcaster> broadcasters = BroadcasterFactory.getDefault().lookupAll();
for (Broadcaster b : broadcasters)
{
System.out.println("Broadcaster: " + b.toString() + "; Count: " + b.getAtmosphereResources().size());
for (AtmosphereResource r : b.getAtmosphereResources())
{
System.out.println("Notifying Resource: " + r.toString());
r.write(msg);
}
}
}
}
Когда я включаю @Broadcast/BroadcastOnPostAtmosphereInterceptor, сообщение передается клиенту (тогда мой код в функции «broadcast» ничего не делает). Когда я комментирую @Broadcast/BroadcastOnPostAtmosphereInterceptor, я ожидаю, что мой широковещательный код доставит сообщение.
С @Broadcast я показываю следующие обратные вызовы ResourceListener: onPreSuspend, onSuspend, onConnect, onMessage, onBroadcast (клиент получает это)
Когда @Broadcast закомментирован, я показываю следующие обратные вызовы ResourceListener: onPreSuspend, onSuspend, onConnect, onMessage (клиент никогда не получает сообщения)
Что я делаю неправильно?
Я использую атмосферу 2.1.2 с Джерси 1.17.