如何使用 ActionCable 作为 API

2024-03-05

我使用 Rails 5 beta 1 和 ActionCable 构建了一个非常简单的应用程序,用于显示用户何时上线并让他们互相发送消息。

现在,我基本上想采用 ActionCable 的客户端部分,在另一个应用程序的上下文中实现它(这确实not在Rails 5上运行)并将其与第一个应用程序连接以发送和接收数据(例如用户的在线状态或消息)。

我认为,要从第二个应用程序发送数据,我可以简单地发出 AJAX POST 请求。问题是:如何从第二个应用程序订阅第一个应用程序的开放连接?

甚至:如何通过 API 从另一个应用程序订阅我的 Rails 应用程序的 ActionCable 连接?

我的猜测是,我本质上想以某种方式在我的第二个应用程序中包含这个咖啡脚本:

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 代码的副本或端口(https://github.com/rails/rails/tree/master/actioncable/app/assets/javascripts https://github.com/rails/rails/tree/master/actioncable/app/assets/javascripts).

更新:我最近发布了一个名为 actioncable-js 的 npm 包,它提供了 Ruby on Rails 5 的 ActionCable CofeeScript 到标准 JS 的直接端口,以便在 Rails 之外使用:https://github.com/mwalsher/actioncable-js https://github.com/mwalsher/actioncable-js

由于 ActionCable 只是 HTML5 WebSockets 之上的一层,因此您还可以使用原始 WebSockets JS 代码(或任何第三方库)来处理消息传递。

ActionCable 消息协议在此处有所记录:https://github.com/NullVoxPopuli/action_cable_client#the-action-cable-protocol https://github.com/NullVoxPopuli/action_cable_client#the-action-cable-protocol。为了方便起见,我将粘贴在下面:

  1. 连接到操作电缆 URL
  2. 连接成功后,发送订阅消息

    • 订阅消息 JSON 应如下所示: {"command":"subscribe","identifier":"{\"channel\":\"MeshRelayChannel\"}"}
    • 您应该收到如下消息:{"identifier"=>"{\"channel\":\"MeshRelayChannel\"}", "type"=>"confirm_subscription"}
  3. 订阅后,您可以发送消息。

    • 确保操作字符串与 ActionCable 服务器上的数据处理方法名称匹配。
    • 您的消息 JSON 应如下所示:{"command":"message","identifier":"{\"channel\":\"MeshRelayChannel\"}","data":"{\"to\":\"user1\",\"message\":\"hello from user2\",\"action\":\"chat\"}"}
    • 收到的消息应该看起来差不多
  4. Notes:

    • 发送到服务器的每条消息都有一个命令和标识符密钥。
    • 通道值必须与 ActionCable 服务器上通道类的名称匹配。
    • identifier and data被冗余地json化了。

例如(在红宝石中)

payload = {
  command: 'command text',
  identifier: { channel: 'MeshRelayChannel' }.to_json,
  data: { to: 'user', message: 'hi', action: 'chat' }.to_json
}.to_json
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ActionCable 作为 API 的相关文章

  • 在 AtTask PUT 请求中发送多个更新

    我想知道 AtTask 的 API 中是否有一种方法可以在单个 URL 请求中发布多个更新 例如 我需要更新 1 000 条记录的 extRefID 我是否可以对 API 进行 1 000 次调用 就开销而言成本高昂 或者我可以使用包含如下
  • Rails 3 和富文本编辑器 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建一个 Rails 3 应用程序 其中包含博客 评论和其他需要用户输入文本的功能 我的问题是使用 Javascript 富文本编辑器是否
  • Rails 3 - 与其自身具有一对一关系的模型 - 我需要belongs_to

    我有一个名为 Person 的模型 它有两个属性 name 和parent person id 一个人总会有一个父母 我应该在模型中使用belongs to吗 如果是的话 这样做有什么好处 class Person lt ActiveRec
  • 通过 Assets Pipeline 携带 Sass 变量,Rails 3.1 rc1

    我最近将我的 Rails 3 0 项目之一与 3 1 rc1 进行了分支 以尝试新的资产管道 在使用 3 1 之前 我一直在项目中使用 Sass 因此我在单独的配置文件中设置了一些变量和函数 并让所有其他 sass 文件在第一行导入该文件
  • 如何随机生成文件的链接?

    我有一个 PDF 文件 我不想通过我网站上的 URL 公开访问该文件 作为 轻微 安全层 我想通过电子邮件向用户发送一个唯一的 随机生成的 URL 他们可以从中下载 PDF 我将把该 PDF 存储在 AWS 或类似的地方 我感觉自己被困在r
  • 多个 Rails 应用程序,单个 MySQL 数据库

    我打算为 site com api site com admin site com 分别创建多个 Rails 应用程序 所有应用程序都将从一个 MySQL 数据库访问相同的表 应用程序和数据库在同一服务器上运行 对于上述访问场景 Rails
  • 如何按城市过滤 WikiVoyage API 结果?

    我目前正在尝试使用 wikivoyage API 我当前的 API 调用如下所示 en wikivoyage org w api php action query list search srwhat text srsearch Pari
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • Rails 命名空间与嵌套资源

    假设我的应用程序有两个模型 Foo 和 Bar Foo 可选地属于 Bar 现在我可以查看单个 Foo 或者搜索特定的 Foo FoosController 会处理所有这些 我的网址是这样的 foos 1 and foos new 有时我想
  • 用户在 Rails 中选择 CSS 样式表

    我正在 Rails 中开发一个网站 我希望用户能够将 CSS 样式表更改为浅色或深色主题 我认为这样我就可以为样式表使用变量 我尝试通过在我的视图中添加一个链接来更改该变量 如下所示 在我的控制器中调用此函数 class ProjectsC
  • rspec 不适用于设计用户身份验证

    我正在尝试使用 RSpec 来测试我的 Rails 应用程序 该应用程序使用设计用户身份验证 gem 以下是已捆绑的相关 gem 的列表 devise 3 4 1 rails 4 1 7 4 1 6 rspec 3 1 0 rspec co
  • 在 Ruby 中创建 Microsoft Word (.docx) 文档

    有没有一种简单的方法可以在 Ruby 应用程序中创建 Word 文档 docx 实际上 就我而言 它是一个由 Linux 服务器提供服务的 Rails 应用程序 类似的宝石Prawn http prawn majesticseacreatu
  • 授予 Rails 应用 API 访问权限的最佳身份验证方法

    我想为我的网络应用程序提供经过身份验证的 API 访问 此类服务的消费者通常是其他网站 服务 验证这些用户身份的最佳方法是什么 OAuth openID http 身份验证 正如我们的工作一样 哪个最好 的答案是这样的 是 这取决于 HTT
  • 使用 Rails 自动登录?

    我正在尝试使用 Rails 的 Restful Authentication 插件建立一个简单的身份验证系统 我只是想知道它是如何工作的 b c 我似乎无法弄清楚 cookie 的要求是什么 以及如何做到这一点浏览器始终会记住您 6 个多月
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • Capistrano 杀死资产:预编译

    我正在尝试部署我的应用程序 但我不断收到 err xxx xxx xx xxx bash line 1 9953 Killed bundle exec rake RAILS ENV production RAILS GROUPS asset
  • 在 Ruby on Rails 中渲染部分集合正在乘以项目

    我想在 Ruby on Rails 的页面中显示项目列表 我使用部分 in my index html erb我有的文件 in list news html erb I have div class news div
  • Facebook 注册后重定向至页面

    我正在尝试在成功 Facebook 注册 未登录 后重定向用户 我想重定向到 getstarted welcome用户注册后首次 我的omniauth回调是 def facebook You need to implement the me
  • Rails 3 ActiveAdmin。如何为关联记录设置默认排序顺序?

    我有一个发货模型和一个发票模型 发票属于装运 所以我添加了一个默认的发货排序顺序 如下所示 config sort order file number desc 但现在我想为发票添加相同的排序顺序 发货表是具有 file number 列的
  • docker 中的 Capybara headless chrome 返回 DevToolsActivePort 文件不存在

    我正在尝试配置系统测试以使用硒中的无头铬 我有以下水豚配置 spec support capybara rb Capybara server puma Silent true RSpec configure do config config

随机推荐

  • 使用可达性类检查互联网连接时应用程序崩溃

    我正在使用此代码来检查互联网连接 但我收到崩溃消息 Reachability reachabilityForInternetConnection unrecognized selector sent to class 0xcbe0c8 我已
  • 如何使用 jquery mobile 和 data-position="fixed" 来“修复”页眉页脚位置

    我正在使用 jquery mobile 对于页眉 页脚 我使用 data position fixed 但是 当我们滚动页面时 页眉页脚消失并在滚动停止时重新出现 有没有一种方法可以让它在您滚动时始终固定在屏幕上并显示 我只能想到一种方法是
  • Mac gcc 非虚拟 thunk 错误

    我仅在应用程序的部署版本中收到这些非虚拟 thunk 错误 它使用名为 Lgi 的私有框架 使用 XCode 3 1 4 最新的 leopard 在 10 5 8 上构建 错误如下所示 Ld Users matthew Code Scrib
  • 如何使用 C# 从 IIS 获取当前的 Worker Request 列表?

    我正在为 RESTful Web 服务状态页面编写代码 我想知道是否有办法将当前请求从 IIS 获取到 C 中 我正在使用 IIS 7 0 我想要的信息在下面 IIS gt 工作进程 gt ASP NET v4 0 gt 请求 您可以使用G
  • 无法在 Azure Function v2 中加载文件或程序集“System.Private.ServiceModel”

    我使用了 v2 azure 函数 持久函数 和调用服务的自定义 dll net core 2 2 但出现以下异常 无法加载文件或程序集 System Private ServiceModel 版本 4 1 2 4 文化 中性 PublicK
  • android中imageView的单击和双击的区别

    我尝试过以下代码来区分单击和双击 单击一下就可以了 当我双击图像视图时 单击和双击部分内的代码都会执行 private static final long DOUBLE PRESS INTERVAL 250 in millis privat
  • 数据进入错误的工作簿

    我有一个编码为从中收集信息并将数据传输到摘要工作簿的工作簿 该代码在收集数据时有效 但它将数据打印到从中收集数据的工作簿 而不是摘要工作簿 这很奇怪 因为它打开摘要工作簿 甚至计算行数 因此数据将转到第一个空行 有人可以告诉我我做错了什么吗
  • Netbeans 中 try-catch Logger 的自定义代码片段

    每次我使用灯泡提示在 Netbeans 中添加 try catch 块时 它都会自动添加以下行 import java util logging Level import java util logging Logger catch Log
  • gradle build Javadoc 任务因“未知标签:attr”而失败

    我正在尝试建立android autofittextview https github com grantland android autofittextview使用 gradle 从命令行进行项目 然而 每次都失败并出现以下错误 User
  • 列表列表中是否存在某个元素?

    我想查找给定元素是否存在于列表列表中 只有当该元素存在于列表的第一个列表中的某处时 我才得到正确的结果 有什么建议吗 memberlist X X T1 T2 memberlist X H T1 T2 memberlist X T1 T2
  • Backbone.js html 选择/单选更改事件未触发,但单击事件是

    我正在学习骨干 但我一直坚持为 html 选项元素绑定 onchange 事件 我尝试使用 change 或 change id 进行绑定 但这些都没有触发 但是 click 和 click id 事件都有效 div div
  • 如何将命名空间感知设置为 false?

    我正在尝试使用 EclipseLink MOXy 解析一些 XML 但它失败了xsi属性 如果我删除它 它解析得很好 然而 我有 100GiB 的 XML 需要费力地浏览 并且无法更改源文件 有人建议如果我可以设置XmlParser set
  • 将基于标签栏的 iPhone 项目迁移到 iPad

    像许多其他开发人员一样 我创建了使用UITabBarController作为根控制器 选项卡视图使用UINavigationController从列表深入到详细视图 和许多其他开发人员一样 我需要将这些应用程序迁移到 iPad 以便它们利用
  • OCaml 是否复制了自定义块?

    想象一下 我有一个名为 libcat 的 C 库 用于与我的毛茸茸的猫进行交互 因此 我正在为 OCaml 编写绑定来简化与 fluffy 的交互 module type CAT sig type cat val find gt cat v
  • Ansible 模板中的 For 循环

    我有问题 我在模板文件中使用 for for vhost in item server vhost endfor 与项目一起使用文件 yml ansible 中的 with items 但出出是 server d server o serv
  • aspnet 表 - 指定 TableCell 宽度?

    我有一个 asp net 表 我试图将我的列格式化为所有相同的宽度 或者说 4 列分别为 20 30 20 和 30 但是以下代码不起作用
  • android:在imageview中拉伸图像以适合屏幕

    我有一个imageview其高度和宽度设置为fill parent with a linearlayout具有相同的值集 所以我想这应该设置我的图像以适合屏幕 但它只适合 80 横向模式下的顶部和底部边距 我尝试了以下代码但没有成功 Dis
  • 将 textPath 方向从逆时针翻转为顺时针?

    默认情况下 SVG 以逆时针方式将文本环绕路径 文本的天花板粘住了路径 如何将方向更改为顺时针 以使文本的地板粘在圆周上而不是天花板上 textspace letter spacing 5px font family fantasy fon
  • 在 android 和 windows 中使用 sha1prng 给出不同的序列

    我在我的android程序和java程序中都使用了sha1prng作为伪随机数生成器算法 我给它们都设置了相同的值 但是android中生成的序列和java中生成的序列不一样 为什么会发生这种情况 解决这个问题的方法是什么 我认为这是因为
  • 如何使用 ActionCable 作为 API

    我使用 Rails 5 beta 1 和 ActionCable 构建了一个非常简单的应用程序 用于显示用户何时上线并让他们互相发送消息 现在 我基本上想采用 ActionCable 的客户端部分 在另一个应用程序的上下文中实现它 这确实n