Siaran Suasana Jersey tidak terkirim

Saya baru mengenal Atmosfir jadi saya pasti melewatkan sesuatu yang sederhana. Saya membuat sampel dan dapat membuat @Broadcast berfungsi tetapi BroadcasterFactory tidak berfungsi. Saya dapat melacak onMessage yang akan dipukul (melalui pendengar) tetapi saya tidak melihat onBroadcast terjadi kecuali @Broadcast ditentukan. Selain itu, kecuali saya menentukan @Broadcast, saya tidak melihat pesan terkirim ke klien. Kode WebSocket saya sangat mendasar:

@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);
            }
        }
    }
}

Ketika saya mengaktifkan @Broadcast/BroadcastOnPostAtmosphereInterceptor maka pesan tersebut diteruskan ke klien (kode saya di fungsi "broadcast" tidak melakukan apa pun). Ketika saya mengomentari @Broadcast/BroadcastOnPostAtmosphereInterceptor maka saya mengharapkan kode Siaran saya untuk menyampaikan pesan tersebut.

Dengan @Broadcast saya menampilkan callback ResourceListener berikut: onPreSuspend, onSuspend, onConnect, onMessage, onBroadcast (klien mendapatkannya)

Ketika @Broadcast dikomentari, saya menampilkan panggilan balik ResourceListener berikut: onPreSuspend, onSuspend, onConnect, onMessage (klien tidak pernah menerima pesan)

Apa yang saya lakukan salah?

Saya menggunakan atmosfer 2.1.2 dengan Jersey 1.17


person BabelFish    schedule 09.04.2014    source sumber


Jawaban (1)


singkirkan AtmosfirResourceLifecycleInterceptor apakah Anda menggunakan SuspendResponse API karena mungkin bertentangan.

person jfarcand    schedule 09.04.2014
comment
Tampaknya ini bukan tautan ke jawaban, mustaccio, tetapi tautan ke forum eksternal. Yang tentu saja lebih buruk lagi bagi SO. - person Tetsujin no Oni; 06.05.2014