【发布时间】:2017-11-09 12:54:41
【问题描述】:
我目前正在使用 Phoenix 框架创建一个应用程序,该应用程序使用通道在大量移动设备和后端服务(显然基于 Phoenix)之间进行双向通信。
鉴于设备由 ID 定义,例如device:2149、device:1234 等,我打算为每个设备创建一个主题。
我有以下插座:
defmodule Webservice.DeviceSocket do
use Phoenix.Socket
channel "device:*", Webservice.DeviceChannel
transport :websocket, Phoenix.Transports.WebSocket
def connect(_params, socket) do
{:ok, socket}
end
def id(_socket), do: nil
end
和以下频道:
defmodule Webservice.DeviceChannel do
use Phoenix.Channel
def join("device:" <> device_id, _params, _socket) do
# do some stuff
{:ok, socket}
end
def handle_in("some_message", %{"data" => data }, socket) do
# Do stuff
{:noreply, socket}
end
end
现在考虑到我预计使用这项服务的设备数量约为 90000,这意味着需要管理 90000 个主题。
大量主题是否会导致一些开销影响应用程序的性能?
【问题讨论】:
-
如果每台设备连接到自己的频道,设备之间如何通信?
-
设备之间不需要直接通信。
标签: elixir phoenix-framework phoenix-channels