2012-02-23 1 views
1

Я разрабатываю приложение в Rails, в котором я предоставляю пользователям возможность редактировать содержимое базы данных через таблицу HTML. Но я хочу сделать это совместное сотрудничество, так что, когда пользователь что-то обновляет, просмотр других пользователей автоматически обновляется.Использование Pusher или аналогичных библиотек для автоматического просмотра обновления из базы данных

Я вызываю функции AJAX для сохранения/обновления данных.

С этим я могу использовать опрос, в котором клиент будет постоянно спрашивать сервер, есть ли какие-либо обновления. Но это будет неэффективно.

Поиск в Интернете Я обнаружил, что могу использовать веб-сокеты, и для этого я могу использовать такие библиотеки, как Pusher, Slanger.

Но я не нахожу ничего о том, как использовать эти библиотеки для автоматического обновления таблицы HTML.

Любые предложения будут оценены.

ответ

2

Если вас не интересует опрос, то паб/суб-сервер - это, вероятно, то, что вы ищете.

Я предлагаю проверить Juggernaut. Он позволяет клиентским браузерам устанавливать длительные подключения к вашему серверу, которые не проводят опрос: вместо этого, когда ваш сервер отправляет push, они отвечают, создавая JavaScript с этого нажатия непосредственно на клиентскую страницу.

У автора Juggernaut есть образец проекта под названием Holla, который делает почти то, что вы ищете, то есть он подписывается на сервер, а при чтении из соединения он обновляет страницу, на которой клиент включен. Холла использует его для создания чата, но вы можете использовать тот же код для обновления таблицы для других пользователей, просматривающих его.

+0

thnx Veraticus.в чем преимущество точечных разъемов над опросом? Я думаю, что push-разъем также использует опрос внутри. я могу ошибаться. пожалуйста, проясните это? и я посмотрел на Джаггернаута, снова посмотрел действительно полезное спасибо. –

+1

Juggernaut не использует опрос внутри; он использует постоянное соединение с сервером на сервере. Websockets гораздо эффективнее, чем опрос для серверных ресурсов. Для опроса требуется, чтобы открывалось соединение с сервером и выполнялся запрос к базе данных, и представление отображалось за X секунд, даже если с тех пор ничего не изменилось ... тогда как опрос уведомляет клиента о том, когда было сделано изменение, что приводит к более эффективному способ связи. – Veraticus

+0

Я думаю, что в последней строке вашего последнего комментария (тогда как опрос ...) вы хотите сказать «Push sockets». да, я понял. также как библиотека может знать, какие строки/поля были изменены. или он просто обновляет все данные. например, в моем случае мне нужно обновить только те ячейки, которые были обновлены. (например, электронная таблица google обновляет только необходимые ячейки), так что мне нужно поддерживать флаги для этого? или библиотека имеет некоторую поддержку для этого. –

1

Я не использую ничего из этого, но быстрый google для pusher.js кажется, что это достаточно легко. На стороне браузера вы определяете обработчик событий.

На стороне сервера вы можете инициировать события и вместе с событием отправлять некоторые данные (например, созданную запись). Это может быть строка или хеш. Хэш будет преобразован в JSON.

Независимо от данных, которые вы отправляете, вы можете использовать любую библиотеку, например jquery или аналогичную, для создания новой строки в таблице (или генерации любого необходимого вам html-файла). В контексте Rails, использующем рендер для генерации html-строки вместо JSON, вы можете использовать частичные и шаблонные элементы. Опять же легко вставить их в DOM с jquery.

Существует даже драгоценный камень для Ruby on Rails, который объединяет функции толкателя. См. pusher tutorial

Я думаю, что другие библиотеки, такие как slanger, будут работать более или менее одинаково.

+0

thnx, но толкатель не является бесплатным. он предоставляет некоторые ограниченные подключения к бесплатным пользователям. и вы сказали, что вы не используете никого из них, а затем как отправлять информацию клиентам с сервера. скажем, когда строка обновляется. как клиенты/пользователи могут быть уведомлены о том, что некоторые данные обновляются (без использования библиотеки, например, толкателя) –

+1

@mashit: Вопрос в том, как использовать эти библиотеки для обновления html. Существует довольно много технологий, которые позволяют что-то подобное, но это может быть довольно сложно установить, особенно если вы ограничены свободным программным обеспечением. Я думаю, что [эта статья] (http://jordanhollinger.com/2011/05/15/writing-an-ajax-long-polling-server-in-ruby -part-1) показывает какой-то способ сделать это. –

+0

thnx thorsten. ваш ответ был полезен. –