Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails web应用程序和Mac应用程序之间的通信_Ruby On Rails_Cocoa_Ipc_Push Notification - Fatal编程技术网

Ruby on rails Rails web应用程序和Mac应用程序之间的通信

Ruby on rails Rails web应用程序和Mac应用程序之间的通信,ruby-on-rails,cocoa,ipc,push-notification,Ruby On Rails,Cocoa,Ipc,Push Notification,我有一个Rails web应用程序,用于从运行我开发的应用程序的iOS设备收集数据 Rails web服务器将处理与Apple推送通知服务的通信,因此iOS应用程序将向其发送所需的设备令牌和一些其他特定于应用程序的数据 Mac应用程序将与Rails应用程序通信,以将消息推送到iOS设备。Mac应用程序和Rails web应用程序都将在同一台Mac服务器上以相同的用户帐户运行 iPhone和Mac应用程序与Rails web应用程序之间的通信将使用web应用程序公开的RESTful web服务完成

我有一个Rails web应用程序,用于从运行我开发的应用程序的iOS设备收集数据

Rails web服务器将处理与Apple推送通知服务的通信,因此iOS应用程序将向其发送所需的设备令牌和一些其他特定于应用程序的数据

Mac应用程序将与Rails应用程序通信,以将消息推送到iOS设备。Mac应用程序和Rails web应用程序都将在同一台Mac服务器上以相同的用户帐户运行

iPhone和Mac应用程序与Rails web应用程序之间的通信将使用web应用程序公开的RESTful web服务完成

iOS应用程序将数据发送到Rails web服务后,我需要将数据发送到Mac应用程序,该应用程序将与Rails web应用程序运行在同一台服务器上,以便它知道需要推送哪些消息以及应该推送到哪里

如果我想在同一个盒子上的Rails web应用程序和Mac应用程序之间进行通信,我应该寻找什么

我曾研究过通过RESTful服务从Mac应用程序轮询web应用程序,但我认为这不是最优雅、最有效的解决方案。是否有某种方法可以从Ruby的Mac应用程序调用某些操作

编辑:

我刚刚阅读了有关
NSDistributedNotifications
和分布式通知中心的内容。这听起来像是我要找的


是否可以从Rails应用程序中使用RubyCocoa发送分布式通知,并让Mac应用程序侦听此通知?

我认为NSDistributedNotifications实现对您没有帮助。可能潜在的概念在这里是适用的。为了检索数据,您需要在iPhone上实现REST服务器。我不知道有现成的API方法可以做到这一点


如果我是对的,请纠正我

我认为你可以让你的cocoa应用程序实现一个监听本地端口的服务器,比如localhost:28888,当你的rails应用程序从你的iOS应用程序接收数据时,你可以直接将数据发送到localhost:28888

也许不是最好的解决方案,但是,如果Rails应用程序可以将通知数据写入轻量级本地数据库或特定本地目录中的纯文本文件,并让Mac应用程序及时读取数据,则已读取的数据可以被删除或移动到另一个表/目录。这可能是一个临时解决方案,理想的解决方案应该是Rob提到的单一Mac web应用程序。

我在OS X上没有任何个人经验,因此对此持保留态度

如果应用程序的主要对象与KVC/KVO兼容,则可以将其属性公开给AppleScript,并使用Ruby的脚本桥更改Mac应用程序属性的值

然后,在应用程序内部,您可以监听这些属性并相应地采取行动

如果应用程序是基于文档开发的,那么大部分KVC/KVO合规性和AppleScript的公开将是自动的。见此:


另一方面,如果应用程序是作为单个窗口应用程序开发的,那么您必须自己实现脚本支持

可能这不是最好的办法,因为在未来的某些时候,您可能需要扩展它,然后您将不得不重写大块代码

如果继续使用restful API,您可以将所有内容移动到任何地方

有很多方法可以做到这一点 例如,您可以有:socket-socket(2)、fifo文件-mkfifo(3)、共享内存-shmget(2) 非常简单的解决方案是让mac应用程序监听udp套接字并等待命令

以下是udp回显的示例:

更简单的是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服务器,或者只使用restful api,因为您可以根据需要扩展它(希望当您有数百万用户时,您可以创建更多rails前端,并且所有用户都可以向mac服务器发送消息)

很抱歉响应延迟。但你似乎误解了我的问题。“Cocoa应用程序”是与rails应用程序在同一系统上运行的Mac应用程序。iOS应用程序和Cocoa应用程序是此问题中的两个独立实体。iOS应用程序本身并不是问题的主要原因,只是需要知道它在那里,并且是系统的一部分。为了更好地澄清这一点,我编辑了我的问题。这似乎有点奇怪。为什么Mac应用程序不只是充当服务器?为什么要使用Rails?我想是因为Rails应用程序已经存在了。集成rails应用程序的功能将需要一些时间和精力,但我想这将是更好的安排,并且可能是这个问题的解决方案。