         {:noreply, socket}
       end
 
+  ## Hibernation
+
+  From Erlang/OTP 20, channels automatically hibernate to save memory
+  after 15_000 milliseconds of inactivity. This can be customized by
+  passing the `:hibernate_after` option to `use Phoenix.Channel`:
+
+      use Phoenix.Channel, hibernate_after: 60_000
+
+  You can also set it to `:infinity` to fully disable it.
+
   ## Logging
 
   By default, channel `"join"` and `"handle_in"` events are logged, using

      @phoenix_intercepts []
      @phoenix_log_join Keyword.get(opts, :log_join, :info)
      @phoenix_log_handle_in Keyword.get(opts, :log_handle_in, :debug)

      import unquote(__MODULE__)
      import Phoenix.Socket, only: [assign: 3]

      def start_link(triplet) do
        GenServer.start_link(Phoenix.Channel.Server, triplet)
      end

      def __socket__(:private) do


  You have three options to choose from when shutting down a channel:

    * `:normal` - in such cases, the exit won't be logged and linked processes
      do not exit

    * `:shutdown` or `{:shutdown, term}` - in such cases, the exit won't be
      logged and linked processes exit with the same reason unless they're
      trapping exits

    * any other term - in such cases, the exit will be logged and linked
      processes exit with the same reason unless they're trapping exits

  ## Subscribing to external topics

