Ruby on rails 如何使用ActionCable作为API
我使用Rails 5 beta 1和ActionCable构建了一个非常简单的应用程序,以显示用户何时在线并允许他们互相发送消息 现在,我基本上希望使用ActionCable的客户端部分,在另一个应用程序(不在Rails 5上运行)的上下文中实现它,并将其与第一个应用程序连接以发送和接收数据(例如用户或消息的在线状态) 为了从第二个应用程序发送数据,我假设,我可以简单地发出一个AJAX POST请求。问题是:如何从第二个应用订阅第一个应用的开放连接? 甚至:我如何通过API从另一个应用程序订阅Rails应用程序的ActionCable连接 我的猜测是,我想在我的第二个应用程序中加入这个咖啡脚本:Ruby on rails 如何使用ActionCable作为API,ruby-on-rails,api,ruby-on-rails-5,actioncable,Ruby On Rails,Api,Ruby On Rails 5,Actioncable,我使用Rails 5 beta 1和ActionCable构建了一个非常简单的应用程序,以显示用户何时在线并允许他们互相发送消息 现在,我基本上希望使用ActionCable的客户端部分,在另一个应用程序(不在Rails 5上运行)的上下文中实现它,并将其与第一个应用程序连接以发送和接收数据(例如用户或消息的在线状态) 为了从第二个应用程序发送数据,我假设,我可以简单地发出一个AJAX POST请求。问题是:如何从第二个应用订阅第一个应用的开放连接? 甚至:我如何通过API从另一个应用程序订阅R
App.appearance = App.cable.subscriptions.create "AppearanceChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
# ...
实际上,您需要在其他应用程序()中包含ActionCable JS代码的副本或端口 更新:我最近发布了一个名为actioncable js的npm包,它提供了Ruby on Rails 5的actioncable CofeeScript到标准js的直接端口,供Rails之外使用: 因为ActionCable只是HTML5 WebSockets之上的一层,所以您还可以使用原始WebSockets JS代码(或任何第三方库)来处理消息传递 ActionCable消息协议在此处有所记录:。为了方便起见,我将粘贴以下内容:
- 订阅消息JSON应该如下所示:
{“command”:“subscribe”,“identifier”:“{\“channel\”:\“MeshRelayChannel\”}”}
- 您应该会收到如下消息:
{“标识符”=>“{\“频道\:\“MeshRelayChannel\”}”,“键入”=>“确认订阅”}
- 确保操作字符串与ActionCable服务器上的数据处理方法名称匹配
- 您的消息JSON应该如下所示:
{“command”:“message”,“identifier”:“{\“channel\”:\“MeshRelayChannel\”,“data”:“{\”to\”:“user1\”,“message\”:“hello from user2\”,“action\”:“chat\”}
- 收到的消息应该看起来差不多
- 发送到服务器的每条消息都有一个命令和标识符密钥
- 通道值必须与ActionCable服务器上的通道类名称匹配
和标识符
是冗余的jsonified李>数据
虽然mwalsher的解决方案对我非常有帮助,但我最近在Rails存储库中发现了一个pull请求,并为我的问题提供了一个正式的解决方案 我想,在不久的将来,这将添加到主文档中。以下是actioncable npm官方软件包的链接:
npm install actioncable --save
您可以将其与mwalsher的解决方案类似地用于任何JS应用程序。只需安装npm软件包:
npm install actioncable --save
下面是文档中的JS示例:
ActionCable = require('actioncable')
var cable = ActionCable.createConsumer('wss://RAILS-API-PATH.com/cable')
cable.subscriptions.create('AppearanceChannel', {
// normal channel code goes here...
});
编辑:拉取请求已经合并了一段时间,现在描述是官方的一部分-只是还没有在Rails指南中。是的。我也在调查这件事。不过,我觉得这并不那么直截了当。至少对我来说不是。有些部分需要调整,不能简单地复制。不幸的是,ES6端口似乎无法与最新版本的Rails 5配合使用。更新了我的答案,并添加了ActionCable JS的直接端口链接:。希望这有帮助!非常非常好的解决方案。谢谢你把这些放在一起!这是非常有帮助的。我决定自己发布一个答案,因为我刚刚在Rails repo上发现了一个带有官方NPM包的pull请求。如何使用socket.io客户端连接到
MeshRelayChannel
?@jim broski请分享这两个应用程序的开放存储库,这对rails和actioncable的新手非常有用。至少在上面分享一个帖子。这将是有用的。