Rails API应用程序中ActionCable的Websocket客户端

时间:2017-08-20 16:20:24

标签: ruby-on-rails websocket ruby-on-rails-5 rails-api actioncable

我需要在我的Rails API(仅限)应用程序中使用Websocket。页面没有任何服务器端呈现。该应用程序是Angular和Xamarin的仅JSON后端。我看到很多教程在Rails中使用coffescript作为ActionCable客户端,但这不是我的情况。

问题是:如何在Rails的coffescript之外使用ActionCable作为API,如Android,iOS,Angular和React客户端?

我找到了不同且有用的资源,但我仍然有点困惑。

1:ActionCable usage for Rails API - 似乎是最好的,但我怎样才能找到ActionCable框架交换的所有JSON命令?

2:Similar Question to the mine

3:Rails API Websocket GEM - 好吧,不是ActionCable,但是这个人已经将coffescript编译成JS并将其移植到项目中。对移动开发没用。

如果有不同的解决方案或更好的知识,请告诉我。我需要“破解”这个以使其正常工作。

编辑:我发现这个回购action-cable-js但是如何整合它?

2 个答案:

答案 0 :(得分:2)

我希望我的回答对任何人都有用。我终于发现了一个名为actioncable-js的库,它帮助我完成了Angular项目。

但还不够。对于我需要使用的移动项目"低级别"用于与Action Cable服务器交互的命令。

协议在这里:protocol

但如果你需要更多,你应该深入了解宝石。

答案 1 :(得分:0)

仅适用于API的Actioncable得到了官方支持,并且名为actioncable的{​​{3}}取消了对仅使用API​​的方法与Actioncable服务器通信的支持。

npm install actioncable

然后在您的反应/角度代码中

import ActionCable from 'actioncable';

# create a connection with the actioncable server
# use ws:// for http and wss:// for https
const cable = ActionCable.createConsumer("ws://your-backend-server.com/cable");
# now you create a subscription
my_subscription = cable.subscriptions.create("MessengerChannel", {
  connected: function() {
    console.log("You've subscribed to the Messenger Channel");
  },
  disconnected: function() {
    console.log("You've disconnected from the Messenger Channel");
  },
  received: function (received_data) {
    # broadcast data from the Messenger channel is received here
    console.log(received_data);
  }
})

在后端,您需要安装actioncable,为此,

# routes.rb file
Rails.application.routes.draw do
  mount ActionCable.server => '/cable'
end