主题计数如何影响 Phoenix 框架中的通道性能



我目前正在创建一个带有 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 个主题。

大量主题是否会导致一些开销,从而损害应用程序的性能?

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

相关内容

  • 没有找到相关文章

最新更新