问题标签 [phoenix-channels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1169 浏览

elixir - 仅在加入 Phoenix 时验证某些频道

如何更改此代码以连接到不需要身份验证的频道,同时仍允许在某些频道上进行身份验证?

phoenix.js:701 WebSocket 连接到 'ws://localhost:4000/socket/websocket?token=&vsn=1.0.0' 失败:WebSocket 握手期间出错:意外响应代码:403

user_socket.ex

collection_channel.ex

应用程序.js

socket.js

0 投票
1 回答
3716 浏览

reactjs - react-redux 在哪里存储套接字连接?

尝试了两种方法:

  1. connectToServer()Starter组件中的动作创建者调用componentDidMount();并像这样调度:

    /li>

接下来我通过 redux 的 mapStateToProps 接收状态connect。结果是组件被调用了四次,结果 props 为空。

  1. 将所有逻辑放入reducer,但结果是:组件使用空道具(未定义的属性)呈现,并且在我在控制台日志中看到连接已建立但组件已经呈现之后的那一刻。

如何处理这样的问题?感谢您的任何建议。

0 投票
1 回答
558 浏览

elixir - 如何测试或序列化 Phoenix.Socket.Broadcast 有效负载中的结构?

如何在通道测试中自动将 ecto struct 序列化为 json 响应?正如我在文档 The event’s message must be a serializable map中看到的那样,我在答案教程中发现,当我Poison.Encoder在模型中使用时,应该对通过传输层(据我了解)传递的任何消息进行编码。

示例模型:

从频道功能之一广播:

最后尝试在测试中从广播接收有效载荷:

然后它上升不匹配错误与有效载荷中未序列化的结构(我试图仅匹配派生模型文件):

如何在测试中获取序列化的 json 消息,就好像它是客户端应用程序一样?

0 投票
1 回答
173 浏览

websocket - Elixir 通道/套接字中处理身份验证/权限的架构/技术挑战

因此,我决定将我在 Node.js 中编写的应用程序重写为 Elixir,因为 Elixir 开箱即用的使用 Node 会带来额外的复杂性。

我的问题是我在 Node 中不太正确的问题,并且在 Elixir 中变得同样复杂,我不完全确定如何解决它。

我正在尝试重新创建很多不和谐的权限。我本质上是在构建一个 CRM 系统,具有不同的角色,如“销售经理”、“销售”、“客户服务代表”等……但他们都能够根据自己的“角色”做不同的事情。

我需要做的一些事情是能够即时更新人员或角色的权限。也许“销售经理”角色不能像“会计师”那样查看公司财务数据,但我们需要让该特定人员访问几天。或者我有一个“客户服务代表”,我们让整个角色能够将事情添加到日历中。我也想有能力杀死会话。

所以我在 Elixir 论坛上看到过一些说法,比如:

  • 使用 Guardian,我真的很想喜欢令牌,并认为不必每次都访问数据库听起来很棒,但我认为这并不实用。除非有一个很好的解决方案来即时更新我还没有找到的令牌。
  • 为每个人提供自己的流程,然后根据新的更改终止并启动流程。这看起来很整洁,但除非出现实际错误,否则我宁愿不杀死进程,我认为这个解决方案会带来很大的问题,比如跟踪问题。虽然我不太熟悉这是否真的会导致问题,或者由于其他原因这是一个糟糕的解决方案。
  • 将 Guardian 与 Guardian_DB 一起使用,这会破坏使用令牌的目的,但至少我会有一个可跟踪的会话。我唯一的问题是我确实计划使用负载平衡器,这样如果套接字连接断开,我可以将其重新连接到同一台服务器,但我不确定是否有办法使用令牌或套接字本身有附加到它的会话。不过,这并不是什么大问题,并且与我在 Node.js 中遇到的问题非常接近。
  • 使用我想远离的 Redis,然后在更新发生时根据 user_id 更新 Redis 中的会话数据,并在每个请求上点击 Redis 以查看用户是否具有权限。我计划最终将它放在多个服务器上,这意味着 ETS 是不可行的,除非我可以像在 Node.js 中那样对套接字连接进行负载平衡。

所以我想我的问题是,

  • 我可以将会话附加到套接字吗?这是一个坏主意吗?
  • 我是否还应该使用令牌,并且只使用 Redis 在每个请求上检查令牌?
  • 令牌仍然是比会话更好的选择吗?
  • 有没有我什至没有提到的更好/更简单的解决方案?

很抱歉,这太冗长了,我从来没有像这个项目那样专业地做一些需要许可的事情,而且我对 Elixir 还是很陌生。

0 投票
1 回答
417 浏览

heroku - Elixir/Phoenix 频道的 Heroku H15 错误

一旦我开始在 Phoenix 中使用 Channels,我就开始在 Heroku 上遇到很多这样的错误:

重现此问题的可靠方法是在笔记本电脑上:

  1. 打开连接到 WebSockets 的 Phoenix 页面
  2. 合上笔记本电脑的盖子
  3. 等待一分钟左右(WiFi 断开/操作系统进入睡眠状态)
  4. 将发生 H15 错误。

我已经在我的 UserChannel 上设置了 45 秒的超时时间;我正在运行 Elixir 1.4.2,Phoenix1.2.1和我phoenix.js刚刚升级到 Phoenix 中使用的那个1.3.0-rc0链接到 rev

我可以看到前端记录的错误,但之后它会愉快地重新连接到后端:

非常感谢如何解决此问题的任何帮助或想法。

编辑:我熟悉 Heroku 的H15 错误代码定义,所以我正在寻找修复或解决方法来消除错误(当然,除了从 Heroku 迁移之外)。

0 投票
1 回答
27 浏览

phoenix-framework - 频道上所有听众的列表

怎么可能在某个时刻看到频道上的所有听众?(我的意思是 phoenix-js 和客户端 js 代码)

像这样的东西:

0 投票
1 回答
1435 浏览

elixir - Elixir/Phoenix 在加入频道上传递有效负载

频道有这个authorized?功能,我想在加入频道时传递生成的本地令牌,以便我可以验证用户的角色,如下所示:

但是,在我的频道设置中,我似乎在加入时没有收到来自客户的任何信息:

IO.inspect(payload)只是%{}。我在这里做错了什么?加入频道时甚至可以收到消息吗?

0 投票
0 回答
487 浏览

java - Phoenix channel.push 无法在 Android 上运行

我正在尝试使用 Phoenix 频道在我的应用程序中聊天。我有一个 Web 客户端和一个 Android 客户端。现在它在网络上正常工作。我在 Android 端遇到问题。

它能够接收推送到频道的消息,但不会发送任何消息。当我尝试推送消息时,会抛出以下异常:

java.net.SocketTimeoutException:超时异常

java.lang.IllegalStateException:另一个消息编写器处于活动状态。你有没有调用close()?

我的聊天频道

在创建频道的 Android 应用上

在 Android 应用上推送到频道

0 投票
1 回答
136 浏览

elixir - 安装 cassandra_ecto 时出错 - Elixer phoenix 框架

在安装 cassandra_ecto 并启动服务器时,遇到一些错误

在它之后无法继续。

0 投票
1 回答
301 浏览

elixir - 如何让用户订阅它所关注的每个聊天

在此处输入图像描述

那是信使的脸书用户界面

如果您使用 phoenix (elixir framework) 来实现它

你会为一次聊天创建一个凤凰频道吗?

这意味着您的客户端(移动设备、Web 等)必须为其订阅的每个聊天打开一个频道

这意味着如果他订阅了 2000 个聊天,他将不得不打开 2000 个频道(客户端负载)。

你会为一个用户创建一个凤凰频道吗?

这意味着您的客户(移动设备、网络等)将只需要打开一个渠道并且

这意味着对于每条传入的消息,您都必须查询房间中的所有用户(服务器负载)。