Pull to refresh

Небольшые проблемы с Faye Comet-Server на рельсах

Привет всем!


Давно уже пишутся хорошые приложения с использованием техлогии асинхронного джаваскрипта(AJAX) на рельсах. Но наконец James Cougland представил отличный сервис по имени Faye Comet-Server, который отлично делает синхронизацию AJAX на всех клиентах канала.

Поиски


По началу я пробовал юзать APE-server написал даже небольшой чат для него но угрюмые проблемы начались на большых лоадах и сервак просто падал. Потом я подумал об Juggernaut но начитавшысь миллион агрессивных постов в его сторону решыл даже не пробовать. Node.js и Socket.io тоже очень неплохие сервисы для реализации технологии Comet но мне надо было что-то интегрирующееся в рельсы. Я решыл попробовать Faye.

Для начала я хотел вспомнить что на старом добром хабре уже есть похожый материал по Comet-y и Faye но все ето изображено на касте сверху там же можно скачать исходних каста и попробывать как оно и с чем его едят. Я же хочу расказать о некоторых проблемах с которыми вы можете столкнуться.

Проблема каналов


В Faye для того чтобы изменения на твоем клиенте показывалась на всех клиентах автоматически используется принцип канала. Ето строка как правило находится в файле application.js и выглядит примерно так:

client.subscribe(var client = new Faye.Client('http://localhost:9292/faye');, function(data) {});

где "/poker/new" ето канал. Ета строчка говорит нам о том что клент которого вы создали:

var client = new Faye.Client('http://localhost:9292/faye');

будет пренадлежать каналу "/poker/new", и все клиенты которые входят в етот канал будут иметь возможность соблюдать у себя в браузере перемены.

Я хочу что бы вы поняли одну важную здесь вещь в Faye. Канал "/poker/new" не имеет ничего общего с url-строкой у меня она например "http://localhost:3000/game/poker". Ето очень важно! Запомніте что канал это простой стринг который абсолютно не имеет ничего общего с урлой.

Проблемы с запуском сервера Faye


Первое что хотелось бы пожелать от разработчиков ето запуск. Он очень даже нехорошый. Каждый раз прописывать в консоли bundle exec rackup faye.ru -s thin -E production ето не самое лучшее что можно было бы представить себе. Но есть несколько вариантов. Описывать их детально я не буду ведь в етом нет очень большой необходимости. Я использовал приемущество daemon_controller для того чтобы Faye-server запускался вместе с Rails-server(Thin Not WEBrick!).

И еще один момент мне спас жызнь потому что ответ мне был нужен быстро так как запуская сервер у меня случалась ошыбка:

ostaptan:cards ostap$ bundle exec rackup faye.ru -s thin -E production
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop
/Users/ostap/.rvm/gems/ruby-1.9.3-p125@cards/gems/faye-websocket-0.4.5/lib/faye/websocket/api.rb:75:in `block in close': undefined method `close_connection_after_writing' for nil:NilClass (NoMethodError)

А ответ тне забыть строчку Faye::WebSocket.load_adapter('thin') в файле faye.ru Который подгружает нам Thin.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.