ActionCable作为Rails5中新加入的最重要的功能之一,在Rail5正式发布前就已经引人瞩目。 ActionCable通过使用WebSocket协议,可以实现从Server端主动向客户端推送消息。 同时也在客户端建立了通向Server端的连接,以保证消息推送的安全性和可靠性。
cable,即为绳索,简单来说,就是可以通过它封装好的模块来实现服务端向指定频道的客户端推送消息,要是比较难理解的话,可以参考我们平时在各大网站上使用的扫码登录,通过手机端扫描二维码,浏览器上无需输入账号密码即可直接登录,并且无需刷新页面,这个功能就可以通过ActionCable来实现。
![](https://img.haomeiwen.com/i783799/8df23178e2229ffb.gif)
这是一个demo的演示,用了action cable实现了一个简单的聊天室。
使用方法
首先这是rails5自带的功能,如果想在5之前的版本使用,可以通过gem来安装。
配置
action cable是基于redis的,所以确保你的redis是启动状态的
/config/cable.yml
![](https://img.haomeiwen.com/i783799/545c673a88e68e0f.png)
/config/routes.rb
![](https://img.haomeiwen.com/i783799/a34ea7c47b3175ac.png)
这里有个坑,本地的cable默认只能跑在3000端口上,要是换了端口,得到application.rb里面配置
一句话
config.action_cable.disable_request_forgery_protection = true
然后就可以开始使用了
$ rails g channel test speak
会生成
![](https://img.haomeiwen.com/i783799/b3971e3ff5585b21.png)
![](https://img.haomeiwen.com/i783799/98008e126c2a4a4b.png)
服务器端好了,开始搞客户端,action cable封装了一系列的js方法供使用者调用
/assets/javascripts/cable.coffee
![](https://img.haomeiwen.com/i783799/152c2620e7a06b7b.png)
建立与服务器中间的通道,默认为当前服务端口
/assets/javascripts/channels/test.coffee
![](https://img.haomeiwen.com/i783799/d69c49a54edd5695.png)
头两个function分别是注册和注销频道,对应刚才test_channel.rb里面的头两个方法,第三个是接受服务器端的消息,也是整个cable里面最神奇的地方,这个function可以实时监控服务器端的消息
打开两个浏览器,进入rails的端口,再打开rails console
ActionCable.server.broadcast 'some_channel', 'hello world!'
谷歌
![](https://img.haomeiwen.com/i783799/e12be0b56b530326.png)
火狐
![](https://img.haomeiwen.com/i783799/85415e50d3246725.png)
我通过服务器端主动向客户端发了一条消息,客户端接收到了消息,并alert出来。
以上便是action cable的简单介绍。
网友评论