Связь между веб-приложением Rails и приложением Mac - PullRequest
3 голосов
/ 03 февраля 2011

У меня есть веб-приложение Rails, которое используется для сбора данных с устройства iOS, на котором запущено приложение, которое я разработал.

Веб-сервер Rails будет обрабатывать связь со службой Apple Push Notification, поэтому iOSприложение будет отправлять ему требуемый токен устройства и некоторые другие данные, относящиеся к конкретному приложению.

Приложение Mac будет связываться с приложением Rails для отправки сообщения на устройство iOS.И приложение Mac, и веб-приложение Rails будут работать на одном сервере Mac под одной и той же учетной записью пользователя.

Связь между приложениями iPhone и Mac и веб-приложением Rails будет осуществляться с помощью RESTfulвеб-сервисы, предоставляемые веб-приложением.

Как только приложение iOS отправило свои данные в веб-сервис Rails, мне нужно отправить эти данные в приложение Mac, которое будет работать на том же сервере, что и Railsвеб-приложение, чтобы оно знало, какие сообщения нужно отправить и куда они должны быть отправлены.

Что мне нужно искать, если я хочу обмениваться данными между веб-приложением Rails и приложением Mac в одном приложении?box?

Я рассмотрел опрос веб-приложения из приложения Mac с помощью службы RESTful, но я не думаю, что это самое элегантное или эффективное решение.Есть ли способ, которым я могу вызвать какое-либо действие из приложения Mac из Ruby?

Редактировать:

Я только что прочитал о NSDistributedNotifications и РаспределенномЦентр уведомлений.Это похоже на то, что я ищу.

Можно ли использовать RubyCocoa из приложения Rails для отправки распределенного уведомления и заставить приложение Mac прослушивать это уведомление?

Ответы [ 5 ]

2 голосов
/ 06 декабря 2011

У меня нет никакого личного опыта с этим на OS X, так что возьмите его с собой.

Если основные объекты вашего приложения совместимы с KVC / KVO, вы можете открыть его свойства для AppleScript,и используйте скрипт-мост Ruby для изменения значений свойств приложения Mac.

Затем внутри приложения вы можете прослушивать эти свойства и действовать соответственно.

Если приложение разработано как Document-На основании этого, большая часть соответствия KVC / KVO и AppleScript будет автоматически.См. Это: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ScriptableCocoaApplications/SApps_implement/SAppsImplement.html#//apple_ref/doc/uid/20000037-BBCJEEEC

С другой стороны, если приложение разработано как приложение с одним окном, вам придется самостоятельно реализовать поддержку сценариев.

2 голосов
/ 03 декабря 2011

Я думаю, вы можете заставить ваше приложение какао реализовывать сервер, который прослушивает локальный порт, такой как localhost: 28888, и в то время как ваше приложение rails получает данные из вашего приложения iOS, вы можете просто отправить его на localhost: 28888

2 голосов
/ 06 декабря 2011

Возможно, это не лучшее решение, но если приложение Rails может записать данные уведомлений в облегченную локальную базу данных или просто текстовые файлы в определенном локальном каталоге, и позволить вашему приложению Mac своевременно считывать данные, данные прочитанные могут быть удалены или перемещены в другую таблицу / каталог. Это может быть временное решение, идеальным решением должно быть одно веб-приложение для Mac, как упомянул Роб.

1 голос
/ 06 декабря 2011

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

Если вы продолжите использовать успокаивающий API-интерфейс, вы можете переместить все, куда хотите.

Есть много способов сделать этот вид IPC, хотя например, у вас может быть: socket - socket (2), файл fifo - mkfifo (3), общая память - shmget (2) очень простое решение - заставить приложение mac прослушивать сокет udp и ждать команды

вот пример для эхо UDP:

http://developer.apple.com/library/mac/#samplecode/UDPEcho/Listings/UDPEcho_m.html#//apple_ref/doc/uid/DTS40009660-UDPEcho_m-DontLinkElementID_5

еще проще - mkfifo:

$ mkfifo /tmp/app_communication_fifo
$ echo 'rails app message' > /tmp/app_communication_fifo & #this will block until somebody reads it
[1] 34415
$ cat /tmp/app_communication_fifo
rails app message
[1]+  Done

но я бы порекомендовал сервер udp или просто придерживался успокаивающего API, потому что вы можете масштабировать его столько, сколько хотите (надеюсь, когда у вас есть миллионы пользователей, вы можете создать больше интерфейсов rails и все они могут отправлять сообщения сервер Mac)

0 голосов
/ 02 мая 2011

Не думаю, что реализация NSDistributedNotifications вам поможет.Может быть, основная концепция применима здесь.Вам нужно внедрить REST-сервер на iPhone, чтобы получить данные.Я не знаю о готовом API-способе сделать это.

Пожалуйста, поправьте меня, если я прав!

...