Rails WebSocket 方案选择

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

有没有建议,谢谢。

共收到 11 条回复

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

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

anycable

如果不是公司语言限制,我选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/actioncable@5.2.2/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
mimosa 回复

tks

jzlikewei 回复

暂时得用rails

10楼 已删除

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

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

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