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

时间:2017-06-08 01:00:51

标签: elixir phoenix-framework phoenix-channels

我目前正在使用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个主题。

大量主题是否会导致一些会影响应用程序性能的开销?

1 个答案:

答案 0 :(得分:1)

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