Можно ли использовать службы «push» на сервере?

Я использую пушер gem для управления моим интерфейсом из внешнего API. Работает нормально, с этим проблем нет.

Но мне интересно, есть ли возможность использовать push-уведомления в бэкэнде моего приложения? Я потратил серьезное количество времени на изучение этого, но не смог найти ничего полезного.

Позвольте мне резюмировать:

У меня есть приложение и другое приложение API, которое тесно взаимодействует с другими. Иногда я хочу использовать свой API для отправки уведомления своему основному приложению, и я хочу иметь возможность манипулировать данными в серверной части моего основного приложения в отношении данных, полученных со стороны API. Это такие вещи, как «действие было завершено/начато/успешно» и т. д.

Я понимаю, что «пушер» получает push-уведомления с помощью JavaScript во внешнем интерфейсе. Но я считаю, что должен быть способ использовать эти уведомления и в бэкэнде.

Если есть другой способ (может быть, Faye? Websocket), я бы хотел узнать, что это такое. Любая подсказка будет оценена.

Это что-то выполнимое?

Спасибо


person scaryguy    schedule 22.02.2014    source источник


Ответы (2)


Pusher — это бэкенд-система (чтобы "отправлять" обновления в каналы)


Конечные точки

Я думаю, вас могут заинтересовать конечные точки

Из того, что я могу понять, похоже, вы хотите инициировать передачу данных в конечную точку после того, как в вашем API произойдет действие? Например:

  • Пользователь регистрируется в приложении "API"
  • Приложение API отправляет «уведомление» в основное приложение
  • Основное приложение увеличивает количество пользователей на 1

Я вижу, как это работает, либо используя ajax, либо отправляя запрос curl в конечную точку вашего основного приложения (установленную в маршрутах), вызывая действие:

#main_app/config/routes.rb
post "endpoint", to: "application#endpoint"

#main_app/controllers/application_controller.rb
def endpoint
    @count = Option.increment!(:user_count)
end

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


API

Сложная, нетрадиционная часть возникает, когда вы хотите отправить данные из своего приложения API в свое основное приложение (откуда вы взяли идею «толкателя»)

Я бы лично посмотрел на отправку стандартного HTTP-запроса в конечную точку основного приложения, возможно, с помощью Curl (если из бэкэнда):

Вы можете установить curb (CUrl RuBy) здесь: https://github.com/taf2/curb

Я мог бы написать код, если хочешь?

person Richard Peck    schedule 22.02.2014
comment
Большое спасибо за ответ, Рич! Вы действительно поняли, что я хочу собрать. Но я не понимаю, какой смысл в логике «push», если я просто отправлю запрос GET или POST из API в свое основное приложение? Кажется, я что-то неправильно понял? Разве не следует использовать Push для той цели, которую я упомянул? Я могу просто использовать Typheous для отправки HTTP-запроса в мое основное приложение? - person scaryguy; 22.02.2014
comment
Push-уведомление предназначено для двусторонней связи (вы должны быть подписаны на канал, чтобы получать обновления). Невозможно подписаться приложением rails на обновления другого приложения — вам нужно инициировать какой-то HTTP-запрос. Я просто рекомендовал CURL (потому что это единственное, с чем у меня был опыт). Если вы хотите использовать Typheous, это полностью зависит от вас!! - person Richard Peck; 22.02.2014
comment
Итак, мы можем подытожить так? Чтобы отправить уведомление из API в приложение, лучший/наиболее удобный способ — это отправить обычный HTTP-запрос из API в приложение. Итак, как же тогда использовать Websocket? Как получить полнодуплексную связь между API и приложением? :\ - person scaryguy; 22.02.2014
comment
Нет, вы не можете просто так резюмировать. Мне все еще нужно больше узнать об API, но я не верю, что API предназначен для инициирования каких-либо запросов, просто отвечает. Если это так, дизайн вашей системы с использованием API для отправки запросов неверен. Вот отличный ресурс по API: en.wikipedia.org/wiki/Representational_State_Transfer - person Richard Peck; 22.02.2014
comment
Если вы ищете полнодуплексное соединение между API и приложением, я бы порекомендовал задать новый вопрос (мне нужно узнать об этом больше!). Моя интуиция подсказывает мне, что это ПОЛНОСТЬЮ возможно, но оно должно быть глубоко интегрировано в ваше приложение с аутентифицированным API. - person Richard Peck; 22.02.2014
comment
Здесь есть еще одно руководство: http://www.pubnub.com/http-rest-push-api/ -- это очень похоже на вопрос Пушера -- о подписке на определенный канал, который сервер будет обновлять - person Richard Peck; 22.02.2014
comment
Ну, я думаю, ты прав. Мне нужно задать еще один вопрос. Я собираюсь это сделать. Оставайтесь с нами, чтобы проголосовать :D - person scaryguy; 22.02.2014
comment
Дайте мне ссылку - я приду и посмотрю, смогу ли я внести свой вклад! - person Richard Peck; 22.02.2014
comment
Вот он: stackoverflow.com/questions/21954483/ - person scaryguy; 22.02.2014
comment
Привет, Рик, я задал тот же вопрос в службу поддержки Pusher и получил ответ, который искал. Я думаю, мне лучше подписать свой ответ как принятый ответ, так как люди могут посмотреть эту ветку и не заметить мой ответ. Извините за это, и я голосую за ваш ответ в качестве подарка от меня :) - person scaryguy; 25.02.2014

Я задал тот же вопрос в службу поддержки Pusher и получил точный ответ, который искал.

Вы можете установить клиентскую библиотеку на свой сервер (http://pusher.com/docs/client_libraries), если есть один для вашего сервера. Затем вы можете подписаться на клиентский канал таким образом.

В моем случае я использую гем Ruby, доступ к которому можно получить с https://github.com/pusher/pusher-ruby-client .

person scaryguy    schedule 25.02.2014