问题标签 [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 回答
207 浏览

phoenix-framework - Phoenix 1.4.0-dev 生成的通道测试失败并出现编译错误

我正在 Docker 容器中使用 Phoenix 框架开发 Web 应用程序。以下是 dockerfile 中有关如何安装 phoenix 的相关行:

这一切都很好。我可以使用以下命令生成一个新的 phoenix 项目:

但是,当我生成一个新频道时:

混合 phx.gen.channel hello_channel

并将这一行添加到用户套接字文件

然后运行

我收到以下错误:

这是mix phx.gen.channel任务生成的通道文件的代码:

这是生成的测试代码:

我正在处理的一个实际项目以及我为隔离问题而启动的一个测试项目遇到了这个问题。

是什么导致生成器进行的测试出现编译错误?

0 投票
0 回答
810 浏览

elixir - 有没有办法从凤凰通道来回调用控制器方法

我需要从凤凰频道调用控制器内部的一个函数。这是我的凤凰频道

这是我的 handle_in 函数

以下是我的控制器功能,此控制器的路由将是“/users”

我是凤凰和长生不老药的新手。我需要从上面的 phoenix 通道中调用“/users”控制器函数。我怎么称呼它。有什么方法可以从 phoenix 通道调用控制器函数,还可以从控制器方法调用“new_msg”的 handle_in 函数。提前致谢

以下是我的要求

  1. 我需要 从主题“dashboard:lobby”中的dashboardChannel的new_msg的handle_in函数调用dashboardController的函数,这是我的“索引”(路由“/users” )
  2. 而且我还需要从dashboardController的索引中调用主题“dashboard:lobby”中dashboardChannel的new_msg的handle_in函数
0 投票
1 回答
490 浏览

javascript - Phoenix,在模板 eex 中使用 socket.js 之外的套接字和 Presence

我想以我自己的方式组织模板中socket和的使用。Presence作为一个新手,在我看来,将所有处理通道的客户端代码放入其中sockets.js可以将其转换为非常大的一块。特别是如果有许多页面使用套接字/存在。我不知道哪个是最好的解决方案(或者这是否对其他人来说是个问题),但是我误解了 js 的功能,导致我很好地组织了代码。

socket.js

app.js,而不是import socket from "./socket"在结尾,我写

在模板中eex(我知道混合 html 和脚本不是一个好习惯)(除了 React 家伙!)我编写了以下脚本:

因此,使用套接字的每个页面的代码都保留在自己的页面中,而不是在socket.js

由于我对这个解决方案并不完全满意,所以我问你,这是正确的吗?是不是?最好的方法是什么?有没有人有这个问题?

===== 编辑 ======

解决方案1:

elixirforum同行曝光了一个清晰、聪明、善良和完整的回应

解决方案2:

Deini 在 Elixir-Lang 的 Slack Channel 中指出的另一个解决方案再次使用 Webpack,并且涉及更多 Phoenix-Elixir 风格,已由 hoang_nguyen 在Medium上发布。

解决方案3:

在Diacode和第二页中使用早午餐和使用Webpack

0 投票
1 回答
1074 浏览

websocket - 计算 Phoenix 应用程序中打开的套接字和通道连接

在 Phoenix 应用程序中是否有一种相对简单的记录方式来读取在任何给定时间当前打开了多少活动套接字和通道?更具体地说,是否可以按主题和其他渠道连接元数据过滤这些数据?

我的用例是分析与我的后端的活动连接。

感谢您的任何建议!

0 投票
1 回答
538 浏览

android - 带有 Android 客户端的 Phoenix 频道

我正在尝试从 Android 客户端创建到我的 Phoenix 应用程序的 websocket 连接。我正在尝试使用这个库,但我遇到了这个问题,我无法成功加入频道。

在查看上述 java phoenix 客户端库的源代码后,看起来客户端连接到套接字的初始请求是使用http模式而不是模式发出的ws(源代码显式更改了提供的 url 以确保它始终使用http)。我不清楚如果没有在我的 Phoenix 应用程序中进行额外配置,这将如何工作:如果向 发出套接字连接请求http://localhost:4000/socket,则该请求将失败,因为/socket当模式为 时没有路由http

图书馆文档中没有任何内容表明我的 Phoenix 应用程序需要任何额外的配置才能使其工作,但由于上述原因,我看不出它是如何工作的。

Phoenix 应用程序是否已内置处理此处指定的握手所需的连接升级等?

作为说明,我从我的 javascript Web 客户端到我的 Phoenix 后端建立 websocket 连接没有问题。

任何建议表示赞赏!

0 投票
2 回答
266 浏览

elixir - 有没有办法在控制器内获取存在列表?

我正在尝试在 phoenix 控制器中获取存在列表,但我需要套接字才能使用该功能Presence.list(socket)

有人知道如何Presence.list(socket)在控制器内部使用吗?我尝试这样做的原因是我想在我的数据库中找到与连接到频道(存在列表)的用户不同的用户。

0 投票
2 回答
312 浏览

elixir - Phoenix 1.4 升级 - (FunctionClauseError) Phoenix.Socket.__terminate__/2 中没有函数子句匹配

我最近将我的 Phoenix 应用程序从 1.3 升级到了 1.4。

一切都很好,除了当我离开页面时出现以下错误:

我尝试在处理特定主题的 user_socket.ex 和 search_channel.ex 中实现终止,但它没有改变任何东西。

非常感谢任何见解!

0 投票
2 回答
620 浏览

elixir - 在 Elixir/Phoenix 中处理无效令牌上的 websocket 连接

我们使用 Guardian 生成令牌,然后在连接到 Phoenix Channels 的套接字时将其用于身份验证。

最近我们发现有些用户从不离开某些页面,并且在一个月左右之后,令牌变得无效,这使得凤凰频道的连接尝试无效。

您如何在客户端处理此类情况?有没有特定的错误可以从 Phoenix 返回让前端知道是什么原因?我们的connect函数user_socket.ex如下所示:

有没有办法使用 Phoenix 频道的 Phoenix JS 库捕获此错误?我们的目标是 1)在令牌过期时阻止它重试,2)可能注销用户或显示用户离线的消息。我们检查了Phoenix JS 的文档,但找不到任何合适的。

0 投票
1 回答
62 浏览

elixir - 如何处理凤凰频道的客户状态

我刚刚从他们的官方网站关注了 Phoenix Channel 和 Presence Documentation。正如它所描述的那样,事情工作得很好。

作为 Channel 文档,它有加入回调,所以当客户加入特定主题时我可以处理一些事情。但是为什么没有我认为应该存在的离开回调呢?

我搜索了一些,发现我可以使用 Presence 来跟踪客户状态。它也有效,但我实际上不需要通知客户。如果我试图在 Channel 的 handle_out 回调中捕获 Presence_diff 事件,它会被多次调用为客户端数量。

正如 Presence 文档所说...

如果您只想使用 Phoenix.Presence 提供的功能的子集,例如跟踪进程但不广播更新,我们建议您查看 phoenix_pubsub 项目中的 Phoenix.Tracker 功能

但是,Phoenix.Tracker 最初需要 :pubsub_server 属性。

这是我的问题。

  1. 为什么 Phoenix.Channel 没有实现 leave-like 回调。
  2. 如何处理特定主题的客户状态(加入/离开)。

提前致谢。

0 投票
1 回答
89 浏览

phoenix-framework - Phoenix Presence:如何将“presence_diff”重命名为更具体的域?

Phoenix 有一个很好的用于广播存在更改的事件,称为presence_diff. 我试图找到一种方法将此事件重命名为更特定于我的域的内容(agent_diff在我的情况下)。

有谁知道这样做是否有惯用的方法?