Рубиновые приложения реального времени: CRAMP vs NODE.JS

Мне было интересно, есть ли у кого-нибудь из вас соображения относительно того, какой из них лучше, и какие факторы следует принимать во внимание при использовании одного из этих

Ответ 1

Я могу говорить больше с другой стороны (Node.js). Я просто написал жемчужину, которая интегрируется с Rails 3, которая использует Node.js-back-end для прослушивания сообщений Redis PUBSUB и соответственно обновляет интерфейс Rails.

Socket.IO + Node не сложно интегрировать с Rails-приложением (особенно, если вы работаете с jQuery), но в зависимости от вашей целевой базы браузера (например, IE7), может быть сложно получить право работать во всех случаях, а именно из-за некоторых странных случаев использования Flash Socket в качестве резервной копии (обычно, когда WebSockets не работают).

Тем не менее, я настоятельно рекомендую Node.js + Socket.IO. Это суперлегкий вес с множеством опций и гибкостью, позволяющими делать практически все, что вам может понадобиться. На мой взгляд, Rails - это фантастическая веб-инфраструктура для создания больших приложений, требующих интенсивного вычислительного интерфейса. Я бы не стал использовать его для небольших приложений, управляемых событиями, потому что он использует столько памяти для одной рамки. Я люблю Ruby/Rails, но когда дело доходит до необходимости чего-то быстрого и чистого обработки событий/обработки сообщений, Node имеет мой голос.

Если вам нужны более конкретные примеры, мой проект Kспасибоbye (клон Resque-esque) связывается с Redis, который, в свою очередь, прослушивается Node.JS, который, в свою очередь, может обновлять веб-приложение.

Плагин: http://github.com/plukevdh/kthxbye (см. http://github.com/plukevdh/kthxbye/blob/master/lib/generators/kthxbye/templates/kthxbye.js)

Node Бэкэнд: http://github.com/plukevdh/kthxbye-node (см.: http://github.com/plukevdh/kthxbye-node/blob/master/poll.js)

(Извиняется за полное отсутствие документации по проекту Node.)

Ответ 2

Я играл с судорогой и рельсами 3 некоторое время назад. Была попытка создать представление с динамическими обновлениями с помощью WebSockets для передачи данных между клиентами и сервером. Он отлично работал с Chrome, но Safari 5 и FF реализуют более новую версию протокола websocket, и Cramp не делает так, что я не мог заставить его работать там.

Я согласен, что использование Ruby для всего стека хорош, но я понимаю, что Cramp сейчас немного отстает от кривой в некоторых аспектах.

Я решил укусить пулю и использовать node.js(и пакет SocketIO) для своих вещей.

Удачи!

Ответ 3

Я пишу несколько нетривиальное веб-приложение, использующее Rails (3) и Cramp вместе в данный момент. У меня нет опыта работы с Node.js, и я только начал использовать Cramp как есть, но выглядит многообещающим. И, на мой взгляд, возможность использования Ruby - большой плюс! (Я начал с Tornado (Python) и не мог нести язык. Извините поклонников Python!)

Недостатком является то, что я нашел очень, очень мало материалов третьих сторон на Cramp. Я думаю, это не удивительно, учитывая, насколько это новое, но вы более или менее сами по себе. Если вам нужна ваша рука, вы, вероятно, не должны использовать Cramp.

Ответ 4

Проверьте различные репозиции судороги. WebSockets перемещают цель, и жить на краю не так просто. Вилка github.com/maccman/cramp работает с реализацией rescent websockets, в то время как оригинальная cramp не обновляется и не рефинансируется. Также взгляните на eventmachine-websockets. Во всяком случае, вы можете использовать тонкую + eventmachine на сервере. С судорогой вы должны работать тонко в режиме производства, судорога еще не очень хорошая.

Ответ 5

Почему вы ограничиваете себя Cramp на рубиновой стороне?

Вы можете использовать Rails также для приложений реального времени с websocket-rails.

Вы также можете использовать системы реального времени, такие как Plezi или Volt... как Вольт, так и Плези работают лучше, чем Cramp, по моему мнению (но я предвзятый, так как я написал структуру Plezi).

Вот простой сервер веб-сервера echo с Plezi:

require 'plezi'

class EchoCtrl
    def index
        redirect_to 'http://www.websocket.org/echo.html'
    end
    def on_message data
        # to broadcast the data add:
        # broadcast :_send_message, data
        _send_message data
    end
    def _send_message data
        response << data
    end
end

listen 

# you can add, a socket.io route for JSON with socket.io
route '/socket.io', EchoCtrl
route '/', EchoCtrl

# exit the irb console to finish the setup and start the Plezi server
exit