【问题标题】:How does topic count affect channels performance in the Phoenix framework?主题数如何影响 Phoenix 框架中的通道性能?
【发布时间】:2017-11-09 12:54:41
【问题描述】:

我目前正在使用 Phoenix 框架创建一个应用程序,该应用程序使用通道在大量移动设备和后端服务(显然基于 Phoenix)之间进行双向通信。

鉴于设备由 ID 定义,例如device:2149device: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


【解决方案1】:

根据this blog post,Phoenix 可以处理至少 200 万个 websocket 连接,但当然前提是你的机器足够强大。 90,000 应该是轻而易举的事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多