Rails WebSocket 方案选择

famince · 2019年05月08日 · 最后由 yfractal 回复于 2019年05月13日 · 2647 次阅读
  1. 后端 rails,前端 typescript,建议用什么方案: 1.Action Cable 2.faye-rails 3.还是手动实现

有没有建议,谢谢。

Action Cable,前端需要分析 json 对象

个人还是比较建议手动 Deploy 一个其他语言的实现。毕竟 EM 很多年没有人维护了。

如果不是公司语言限制,我选 3 吧。楼上的anycable有 golang 版本,但是Action Cable好像只有 pub sub 模式。

手动实现会比较好一点 ActionCable 前端需要适配 而且更改起来麻烦

为什么不试试 go 呢?我们目前的做法是通过 go 来保持 go 长链接。

# Gemfile
gem "anycable-rails", "~> 0.6.2"
gem "google-protobuf", "~> 3.7"
gem "jwt", "~> 2.1"
# Procfile
bundle exec anycable --server-command="anycable-go --headers=Upgrade,Host,Referer,User-Agent,X-Forwarded-For,X-Real-IP,X-Request-Id,Remote_addr,Origin,Connection,Authorization,Sec-WebSocket-Protocol,Sec-WebSocket-Key,Sec-WebSocket-Accept --host=localhost --port 3334"
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/assets/compiled/action_cable.min.js"></script>
<script type="application/javascript">
  (function() {
    this.App || (this.App = {});
    App.initialize = (async () => {
      const accessToken = await getToken();

      ActionCable.INTERNAL.protocols.push(accessToken.auth.access_token);

      return ActionCable.createConsumer("ws://localhost:3334/cable");
    })();
  }).call(this);
  });
</script>
token =  request.headers["HTTP_SEC_WEBSOCKET_KEY"].to_s.split(", ").last
jzlikewei 回复

暂时得用 rails

10 楼 已删除

faye 还是不错的。不过我当时用的是 node 版本的。

用 Erlang/Elixir 啊,要不然用 Rust 啊。 我瞎说的,其实 AcitionCable 够用了,实在不行 AnyCable。

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