       @phoenix_intercepts []
       @phoenix_log_join Keyword.get(opts, :log_join, :info)
       @phoenix_log_handle_in Keyword.get(opts, :log_handle_in, :debug)
+      @phoenix_hibernate_after Keyword.get(opts, :hibernate_after, 15_000)
 
       import unquote(__MODULE__)
       import Phoenix.Socket, only: [assign: 3]
 
       def start_link(triplet) do
-        GenServer.start_link(Phoenix.Channel.Server, triplet)
+        GenServer.start_link(Phoenix.Channel.Server, triplet, hibernate_after: @phoenix_hibernate_after)
       end
 
       def __socket__(:private) do

        {:noreply, socket}
      end

  ## Logging

  By default, channel `"join"` and `"handle_in"` events are logged, using


  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

