问题标签 [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.
elixir - Phoenix 不会将主题与频道匹配
我目前正在 Phoenix 版本 1.2.1 和 Elixir 1.4.1 上编写即时消息服务器,并遇到了涉及渠道的问题。如果这会影响任何事情,我会使用 --no-html 和 --no-brunch 开始该项目。
当我尝试将此 JSON 字符串发送到服务器时:
我Ignoring unmatched topic "mailbox:tom" in InstantMessenger.UserSocket
从命令提示符中得到。现在我的第一个想法是检查我的 user_socket.ex 文件,但我channel "mailbox:*", InstantMessenger.MailboxChannel
根据文档写了应该匹配的文件。老实说,我不知道此时可能出了什么问题,因此我们将不胜感激。
我的 endpoint.ex 文件中的代码是:
socket "/socket" InstantMessenger.UserSocket
并来自我的 user_socket.ex:
来自mailbox_channel.ex 的加入函数是
elixir - 凤凰存在 fetch/2 覆盖
我希望能够通过:meta
phoenix 存在的地图传递用户元数据,以便从 JavaScript 端访问它。更具体地说,我希望能够推送图像文件路径(字符串)并将它们与我的存在列表中的每个用户相关联。文档给出了这个示例,用于覆盖 fetch/2 函数以将用户模型数据添加到:meta
地图中:
但是,当我对我的用户模型进行适当的更改时,我会收到有关变量 u 和 from/2 函数以及cannot use ^Map.keys(entries) outside of match clauses
.
我去寻找尝试做类似事情的人的例子,但在 github 上找不到与我在这里尝试的类似的东西。
任何人都知道如何重新构建 fetch/2 函数以使其正常工作?我有一个包含 3 个字段、电子邮件、密码和图标/头像图像的基本用户模型。
elixir - 有没有办法通过 phoenix 通道通过 websockets 发送文件?
我现在正在开发一个聊天功能,想知道是否有一种简单的方法可以通过 websockets 发送文件。
到目前为止,我一直很不成功,我让它在 http 上工作得很好,但是当它通过我的 websocket 到达另一端时,它似乎永远不会收到我的文件。
使用websockets来回发送文件甚至是一个好主意,还是当有人想要上传文件时我应该坚持使用http?
elixir - 如何使用 Phoenix Presence 跟踪主题/子主题的存在?
我将子主题用作其他人可以用来向特定其他人发送消息的单用户频道。
例如: - 我是用户 1,我想向用户 2 发送一条消息。 - 我发送一条带有有效负载的消息{ to: 2, message: 'hi' }
并handle_in
执行App.Endpoint.broadcast("user:2", "hi")
这是我的一个片段user_channel.ex
:
对于任何好奇的人:代码是开源的
https://github.com/NullVoxPopuli/mesh-relay-phoenix/tree/feature/presence-tracking
elixir - 主题数如何影响 Phoenix 框架中的通道性能?
我目前正在使用 Phoenix 框架创建一个应用程序,该框架使用通道在大量移动设备和后端服务(显然基于 Phoenix)之间进行双向通信。
我打算为每个设备创建一个主题,因为设备是由 ID 定义的,例如device:2149
,device:1234
等等。
我有以下插座:
和以下频道:
现在考虑到我预计使用此服务的大量设备大约有 90000 个,这意味着需要管理 90000 个主题。
大量主题会导致一些开销,从而损害应用程序的性能吗?
elixir - 如何在 Channel 测试用例中读取新的 Phoenix 通道实例的状态?
我有以下凤凰频道处理传入的消息,广播它,然后更新频道实例的socket
状态:
我试图handle_in("update", ...)
通过这个测试用例测试函数的行为:
这里的问题是我找不到socket
在测试用例中获取新更新状态的方法。
模块中没有
assert_socket_state
函数,Phoenix.ChannelTest
我找不到任何允许获取最新套接字状态的函数我考虑过定义 a
handle_call
或 ahandle_info
来返回套接字状态,但这意味着我必须获取通道的 pid 才能调用它们。我考虑过
handle_in
为此目的定义一个,但我不想在我的频道中放入一个将在生产中可用的自省工具。
推送消息后,如何 socket
在测试用例中获取更新?
ssl - 如何使用 Nginx 在 Centos 7 上安装 SSL 证书
我需要在我的服务器上设置 SSL,并且一直在推迟它,我现在已经完成了,发现它比预期的要简单得多,所以对于其他人来说,这是我遵循的过程。
我有一个专用服务器,并下载了 GeoTrust 证书和私钥(由我的主机提供)。
我已经将这两个上传到 /etc/nginx/ssl/ (以 root 身份)。
我在我的 Nginx default.conf 中添加了以下内容:
我已经打开了 443 端口,如下所示:
并添加了 https 服务:
我现在可以在我的域中通过 https 访问该应用程序。
最后一个问题是通过 wss 设置 Phoenix Web 套接字,我将编辑这篇文章并在完成后立即添加该信息。
某人。
elixir - 在加入 Phoenix 频道(或其他 pubsub)时同步应用程序状态
我正在构建一个协作绘图板(例如 r/place):有一个像素网格,用户可以随时更改它,并且像素更新会在线传播给所有其他用户。我想使用凤凰频道来广播像素变化。
我的问题是关于当用户连接到服务时如何正确发送当前应用程序状态。
目前我有一个 ETS 表保存绘图板状态。我可以MyChannel.handle_in/3
在广播任何像素写入之前更新此表。
我担心在读取当前状态MyChannel.join
和用户被 Phoenix 订阅频道之间,不同的进程会更新状态。
用户将获得应用程序状态的陈旧版本,并且他们还没有被订阅,因此他们也不会通过 Channel 获得更新。
为了解决这个问题,我认为我需要一种方法来自动读取当前状态,然后订阅 pubsub,确保在该时间段内没有消息写入 ETS 表或 Channel。我猜是锁?是 Elixirey,还是有其他方法?
elixir - 如何测试推送结果而不是回复的凤凰频道?
我有一个 phoenix 频道,它会在handle_in之后在handle_info上推送结果,而不是立即回复(请不要问为什么,我有一个用例)。下面的示例与我的情况类似。
到目前为止,我可以轻松测试handle_in(因为没有回复),但是如何在handle_info之后等待和测试套接字推送的结果?