所以为了解决这个问题,我做了以下事情。
首先,我根据文档将 Redix.PubSub 设置为依赖项。然后在我做的频道中:
defmodule MyApp.ChannelName do
use Phoenix.Channel
def join(stream_name, _message, socket) do
# Open a link to the redis server
{:ok, pubsub} = Redix.PubSub.start_link()
# Subscribe to the users stream
Redix.PubSub.subscribe(pubsub, stream_name, self())
{:ok, socket}
end
# Avoid throwing an error when a subscribed message enters the channel
def handle_info({:redix_pubsub, redix_pid, :subscribed, _}, socket) do
{:noreply, socket}
end
# Handle the message coming from the Redis PubSub channel
def handle_info({:redix_pubsub, redix_pid, :message, %{channel: channel, payload: message}}, socket) do
# Push the message back to the user
push socket, "#{channel}", %{message: message}
{:noreply, socket}
end
end
在我的情况下,我要求用户使用某个名称注册一个频道,例如channel_my_api_key
。然后我将开始在 redis 频道上收听并通过该功能channel_my_api_key
将信息流回给用户。push
注意广播可以代替推送。
还要感谢 Elixir 论坛的 Alex Garibay 帮助我找到了解决方案。你可以在这里找到线程。