檢視原始碼 ssh_server_channel 行為 (behaviour) (ssh v5.2.5)
-behaviour(ssh_server_channel). (取代 ssh_daemon_channel)
注意
此模組取代 ssh_daemon_channel。
舊模組仍然可用於相容性,但不應在新程式中使用。舊模組將僅維護一些錯誤修正
SSH 服務(客戶端和伺服器)實作為在 SSH 連線上多路複用的通道,並透過 SSH 連線協定進行通訊。此模組提供一個回呼 API,處理守護程式的通用通道方面,例如流量控制和關閉訊息。它讓回呼函式處理服務(應用程式)的特定部分。此行為也確保通道程序遵守 OTP 程序的原則,使其成為監督樹的一部分。這是實現將新增到 ssh
應用程式監督樹的子系統的通道程序的要求。
注意
當實現客戶端子系統處理程式時,請改用 -behaviour(ssh_client_channel)。
摘要
回呼
處理傳送到通道的除了 SSH 連線協定、呼叫或投射訊息之外的其他訊息。
處理可能需要服務特定注意的 SSH 連線協定訊息。詳細資訊,請參閱 ssh_connection:event/0
。
進行必要的初始化,如果初始化成功,則傳回初始通道狀態。
當通道程序即將終止時,會呼叫此函式。在呼叫此函式之前,如果先前未呼叫,則會呼叫 ssh_connection:close/2。此函式會進行任何必要的清理。當它傳回時,通道程序會以原因 Reason
終止。傳回值將被忽略。
回呼
-callback handle_msg(Msg :: term(), State :: term()) -> {ok, State :: term()} | {stop, ChannelId :: ssh:channel_id(), State :: term()}.
處理傳送到通道的除了 SSH 連線協定、呼叫或投射訊息之外的其他訊息。
此函式應處理可能的 Erlang 'EXIT' 訊息,並且所有通道都應處理以下訊息。
{ssh_channel_up,
ssh:channel_id/0
,
ssh:connection_ref/0
}
- 這是通道收到的第一個訊息。如果伺服器想在沒有先收到客戶端的訊息的情況下傳送訊息給客戶端,則此訊息特別有用。如果此訊息對您的特定情況沒有用處,請立即傳回{ok, State}
來忽略它。
-callback handle_ssh_msg(ssh_connection:event(), State :: term()) -> {ok, State :: term()} | {stop, ChannelId :: ssh:channel_id(), State :: term()}.
處理可能需要服務特定注意的 SSH 連線協定訊息。詳細資訊,請參閱 ssh_connection:event/0
。
以下訊息由 ssh_server_channel
行為處理。
{closed,
ssh:channel_id/0
}
- 如果尚未傳送關閉訊息,通道行為會傳送關閉訊息到另一端。然後它會以原因normal
終止通道。
-callback init(Args :: term()) -> {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} | {stop, Reason :: term()} | ignore.
進行必要的初始化,如果初始化成功,則傳回初始通道狀態。
可以傳回的逾時值具有與 gen_server
相同的語義。如果發生逾時,則會將 handle_msg/2
呼叫為 handle_msg(timeout, State)
。
-callback terminate(Reason :: normal | shutdown | {shutdown, term()} | term(), State :: term()) -> term().
當通道程序即將終止時,會呼叫此函式。在呼叫此函式之前,如果先前未呼叫,則會呼叫 ssh_connection:close/2。此函式會進行任何必要的清理。當它傳回時,通道程序會以原因 Reason
終止。傳回值將被忽略。