分享 DHH 亲自给你演示, 如何用 Action Cable 做一个实时的聊天 app

poshboytl · 2015年12月21日 · 最后由 lilijreey 回复于 2017年04月27日 · 10147 次阅读

终于得到 DHH 批准,把他亲自演示如何在 Rails 5 中利用 Action Cable 做一个实时的聊天 app 的视频上传到了 Railscasts-china.com . 有时间在做翻译,现在大家先睹为快吧!
Enjoy!!

前往 Railscasts-china 观看

赞 DHH 大神,以及祝贺 RailsCasts China 终于更新了。 距离 RailsCasts China 上一次发布视频,已经两年过去了,而 RailsCasts 则两年半没有发布新视频了。 让人追忆逝去的时光~~~

感谢分享,正在观看。视频介绍中的”时时交互“要改一下。

这个版本又会将 rails 推上一个高峰

看到一半断了,好像也没法续传的样子....还是得去 youtube....

有意思,Action Cable 每一个连接的处理是通过 EventMachine 进行的,而实际的工作又是通过一个 Ruby 的线程完成的。想起了那天邱华分享的从 EM 事件循环中派生 thread 的那个 API。那个 API 叫什么来着,居然忘记了 T_T @qhwa

#6 楼 @cqcn1991 感谢你的反馈,重新上传了文件... 应该是解决了这个问题!如果还有问题,麻烦告诉我一下 :)

#8 楼 @poshboytl 现在是没问题了...我以为是我网络的问题?虽然刚才直接翻墙去看原链接了哈哈哈

看过了,挺好的,可是不支持 PHP 语法,这有啥用?

#7 楼 @psvr 以前有个很老的项目 websocket-rails,每个连接都是通过 em 进行的,这两个思路是一致的,都是用 em 处理,然后将链接信息存到 redis 中。

赞!终于可以在 Rails 中完成所用工作了~

@psvr 同求分享的内容。另外派生 thread 是为了不阻塞 EM 接收下面的请求么? 另外,视频里的思路是把 render 放到 job 里去,也是为了不阻塞 EM 么?

很精彩。

哇,太酷了

#7 楼 @psvr #14 楼 @darkbaby123

EM 负责处理并发请求,job 任务是通过 Celluloid 去执行的,Celluloid 本质是用线程池实现的。

#12 楼 @rubyu2 别提那个项目了,现在想到就做噩梦

迫不及待想要试试 Action Cable 了

不错。。。晚上看看。。。回来砸场子。。 😃

令我震惊的是:RailsCasts China 居然更新了!😂

和 Phoenix 用 channel 比怎样?

#24 楼 @gonglexin Phoenix 性能应该更好

这个配上 mvvm 或者 react 应该非常棒,不然用 jq 艹页面能预感到会有非常多的问题。。

railscasts-china 一更新就是重磅,赞!

channel 是 rails 5 独有的新功能吗?

为自己的英语水平捉急。并不能完全听懂。。。书到用时方恨少。。

@gonglexin @yukihiro_matz Phoenix 的 channel 的抽象层级更高,而且个人感觉设计得更加容易理解。

我两个都写过 demo,ActionCable 里面分了 cable server, channel, broadcasting 三个概念,其中 broadcasting 才是负责把服务端的消息发送给客户端的,并且要跟 stream_from 配合起来用。虽然这些写法是固定套路,但感觉框架层面还可以把 API 实现得更简单点。不过 ActionCable 毕竟诞生不久,总有时间变得更好。

BTW 简单地看了一下 broadcasting,Rails 是直接把消息代理给 Redis 的 pub/sub 了。所以理论上 Rails 应该是不知道有多少个 subscriber 的。这点我没证实过,如果说错了欢迎指正。想了解的可以去 edge Rails 文档里去查。

Phoenix 里面的 socket 和 channel 都是抽象概念,具体实现方式不仅限于 WebSocket,所有主流平台都有对应的客户端(Web, iOS, Android),这应该是它相比 ActionCable 最大的优势。socket/channel 对应传统的 route/controller,代码处理方式也比较一致,你可以在 socket 文件中定义针对 channel 的路由,每个 channel 的 handle_in/handle_out 方法用来处理输入输出。感兴趣的可以去看 Phoenix Channel

恭喜 Railscasts-china.com,很不错的网站

占位,明天看

PR to enable using PG as storagePR to remove EventMachine合并后,Windows 下终于也可以跑这个 ActionCable Demo 了,有兴趣可以看看

想问一下各位,今天我尝试的用在纯 API 项目里,直接报了一个错误 Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, HTTP_UPGRADE: ),想请教一下,是需要配置 websocket 吗?

stargwq 回复

加个好友聊聊吧

hrz3424 回复

怎么加啊😗 😛

需要 登录 后方可回复, 如果你还没有账号请 注册新账号