Событие на частном канале толкателя получено только после обновления страницы?

Я создаю частный канал, на который будет отправлен результат длительной операции. В консоли моего браузера есть следующее:

Pusher : State changed : initialized -> connecting
rt_cli...?body=1 (line 5)
Pusher : Connecting : {"transport":"ws","url":"ws://ws-eu.pusher.com:80/app/xxxxxxxxxxxxx?protocol=6&client=js&version=2.1.2&flash=false"}
rt_cli...?body=1 (line 5)
Pusher : State changed : connecting -> connected
rt_cli...?body=1 (line 5)
POST http://localhost:3000/pusher/auth

pusher.min.js (line 111)
Connected to Pusher!
common.js?body=1 (line 56)
Pusher : Event sent : {"event":"pusher:subscribe","data":{"auth":"179bfeac81d16e6ae36f:81fa74052368dac232d70146d2f2d343f3d4ce5befc34bce43673a9e6ceaa38a","channel":"private-user-channel-11"}}
rt_cli...?body=1 (line 5)
Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"private-user-channel-11"}
rt_cli...?body=1 (line 5)
Pusher : No callbacks on private-user-channel-11 for pusher:subscription_succeeded

Соединение на стороне клиента выглядит так:

  $(document).ready(function() {
      Pusher.host = 'ws-eu.pusher.com';
      Pusher.sockjs_host = 'sockjs-eu.pusher.com';

      pusher = new Pusher("#{ ENV["PUSHER_APP_KEY"] }", {cluster: "eu"});
      var channel = pusher.subscribe("private-user-channel-11");

      // Some useful debug msgs
      pusher.connection.bind('connecting', function() {
        clog("connecting to pusher");
      });
      pusher.connection.bind('connected', function() {
        clog('Connected to Pusher!');
      });
      pusher.connection.bind('failed', function() {
        clog('Connection to Pusher failed :(');
      });
      channel.bind('subscription_error', function(status) {
        clog('Pusher subscription_error');
      });

      channel.bind("ninja", function(e) {
        console.log(e);
      });
    });

Из моего рабочего процесса я запускаю событие следующим образом:

Pusher.trigger s_channel_name, "ninja", {"message" => "whatever"}

Дело в том, что моя страница загружается, и скрипт выполняется, но в браузере я не получаю сообщения. Однако, если я обновлю страницу (и сохраню журналы в консоли браузера, я увижу, что сообщение получено). Кроме того, я заметил, что если я войду в два разных браузера и оставлю страницу открытой в обоих из них, браузер, который не обновляется, получит событие в режиме реального времени. Это наводит меня на мысль, что браузер, который инициирует (даже косвенно запрос, исключен из числа получателей сообщения. Есть ли способ транслировать всем пользователям, подключенным к частному каналу? Кроме того, кажется, что если я вызову событие вручную из консоли Rails, оно появляется мгновенно (без необходимости обновления браузера).

РЕДАКТИРОВАТЬ: Похоже, мой работник закончил свою работу до того, как браузер смог загрузить страницу, и сообщение было потеряно. Извините, что подумал, что проблема в другом.


person Geo    schedule 06.09.2013    source источник
comment
возможно, стоит отправить свое решение в качестве ответа на свой вопрос и отметить его как ответ. Таким образом, это не кажется открытым вопросом.   -  person leggetter    schedule 17.09.2013


Ответы (1)


Проблема заключалась в том, что воркер инициировал сообщение до завершения загрузки страницы, и я не мог отреагировать на это событие.

person Geo    schedule 17.09.2013