Фэй не публикует при использовании браузера на другом компьютере в сети

У меня есть реализация faye в моем приложении rails. Метод публикации работает правильно, когда оба браузера находятся на одном компьютере. Когда я открываю приложение из другого браузера на другом компьютере, оно работает только от клиента к серверу и не публикуется для других клиентов. Кроме того, событие публикации не отправляется клиенту, когда в браузере на сервере происходят изменения.
Код публикации контроллера:

def publish(channel, data)
    message = {
      :channel => channel,
      :data => data,
      :ext => {:faye_token => FAYE_OUTGOING_AUTH_TOKEN}
    }
    uri = URI.parse('http://localhost:9292/faye')
    Net::HTTP.post_form(uri, :message => message.to_json)
end

Команда для запуска faye:

rackup faye.ru -s thin -E production -d

Пример:
A: Сервер, B: Клиент1, C: Клиент2

A B и C - это разные компьютеры в одной сети, и все они подписаны на один и тот же канал.

  1. Если я введу данные в B, A увидит данные, но C не увидит данные, пока я не обновлю страницу (которая получает данные из db).
  2. Если я ввожу данные в A, они не публикуются для других клиентов.
  3. Если я ввожу данные в C, в канал, на который подписаны только C и B, только C может видеть данные, и они не публикуются в B.

Если бы A, B и C были разными браузерами на одном компьютере, все вышеперечисленные случаи работали бы.

Я запускал это в режиме разработки и пробовал WEBrick, Unicorn и Thin.

Любая помощь будет оценена по достоинству. Спасибо.


person Babak Basseri    schedule 29.11.2012    source источник


Ответы (2)


Чтобы решить эту проблему, я заменил все экземпляры «localhost» на адрес сервера, на котором работает Фэй. Это также касается подписки клиентов на каналы.

Надеюсь, это поможет, ура!

person Babak Basseri    schedule 05.12.2012

Привет, Бабак: Я тоже сталкиваюсь с такой же проблемой, я использую nodejs + express + faye. поэтому я должен добавить ip_addr: port к каждой подписке, клиенту

var client = new Faye.Client('/faye',{
        endpoints:{
                 websocket:'http:ws.chat-yummyfoods.rhcloud.com'
              }
        ,timeout: 20
    });
client.disable('websocket');
console.log("client:"+client);
var subscription=client.subscribe('/channel', function(message) {
        console.log("Message:"+message.text);
        $('#messages').append('<p>'+message.text+'</p>');
    });
subscription.then(function(){
        console.log('subscribe is active');
        alert('subscribe is active');
    });
person Pulkit    schedule 14.05.2014
comment
Итак, я использовал строку uri = URI.parse('http://localhost:9292/faye'), а на другом компьютере он пытался получить доступ к своему собственному localhost, который отличался от основного адреса faye. Если они указали на адрес моего сервера uri = URI.parse('http://SERVER_IP:9292/faye'), проблема была решена. - person Babak Basseri; 19.05.2014
comment
Я также решил проблему. Прочтите stackoverflow.com/questions/23650534/ - person Pulkit; 19.05.2014