socket(path, module, opts \ [])
소켓에 대한 websocket/longpoll 마운트 지점을 정의합니다.
:websocket - 웹 소켓 구성을 제어합니다. 기본값은 true입니다. false 또는 옵션의 키워드 목록일 수 있습니다. 전체 목록은 "공통 구성" 및 "WebSocket 구성"을 참조하십시오.
:longpoll - 롱폴 구성을 제어합니다. 기본값은 false입니다. true이거나 옵션의 키워드 목록일 수 있습니다. 전체 목록은 "공통 구성" 및 "Longpoll 구성"을 참조하십시오.
소켓이 Phoenix.Socket을 사용하여 구현된 경우 Phoenix.Socket 사용에 허용된 모든 옵션보다 높은 각 전송을 전달할 수도 있습니다. 여기에 제공된 옵션은 Phoenix.Socket 사용 값을 재정의합니다.
socket "/ws", MyApp.UserSocket
socket "/ws/admin", MyApp.AdminUserSocket,
longpoll: true,
websocket: [compress: true]
경로에 변수를 포함할 수 있습니다. 이러한 변수는 소켓에 전달되는 매개변수에서 사용할 수 있습니다.
socket "/ws/:user_id", MyApp.UserSocket,
websocket: [path: "/project/:project_id"]
아래 구성은 :websocket 및 :longpoll 키 모두에 제공될 수 있습니다.
:path - 운송에 사용할 경로. 기본적으로 전송 이름("/websocket" 또는 "/longpoll")이 사용됩니다.
:serializer - 메시지에 대한 직렬 변환기 목록입니다. 자세한 내용은 Phoenix.Socket을 참조하세요.
:transport_log - 전송 계층 자체가 로깅해야 하는 경우, 그렇다면 레벨
:check_origin - 전송이 원본 헤더가 있을 때 요청의 출처를 확인해야 하는지 여부. true, false, 허용되는 호스트 목록 또는 MFA 튜플로 제공되는 함수일 수 있습니다. 기본값은 끝점 구성 시 :check_origin 설정입니다.
true인 경우 헤더는 YourAppWeb.Endpoint.config(:url)[:host]의 :host에 대해 확인됩니다.
false인 경우 앱이 CSWSH(Cross-Site WebSocket Hijacking) 공격에 취약합니다. 호스트를 실제로 알 수 없거나 모바일 앱과 같이 원본 헤더를 보내지 않는 클라이언트를 제공할 때 개발 중인 경우에만 사용합니다.
명시적으로 허용된 출처 목록을 지정할 수도 있습니다. 와일드카드가 지원됩니다.
check_origin: [
"https://example.com",
"//another.com:888",
"//*.other.com"
]
또는 요청 연결의 호스트, 포트 및 체계와 일치하는 출처를 수락하려면:
check_origin: :conn
또는 사용자 지정 MFA 함수:
check_origin: {MyAppWeb.Auth, :my_check_origin?, []}
MFA는 요청 %URI{}를 첫 번째 인수로 사용하여 호출되고 MFA 목록의 인수가 뒤따르며 부울을 반환해야 합니다.
:code_reloader - 코드 리로더를 활성화 또는 비활성화합니다. 엔드포인트 구성의 기본값
:connect_info - 사용자 소켓 connect/3 콜백에서 사용할 수 있도록 전송에서 복사할 데이터를 나타내는 키 목록
유효한 키는:
:peer_data - the result of Plug.Conn.get_peer_data/1
:trace_context_headers - 모든 추적 컨텍스트 헤더의 목록입니다. 지원되는 헤더는 W3C 추적 컨텍스트 사양에 의해 정의됩니다. 이러한 헤더는 OpenTelemetry와 같은 라이브러리가 이 요청이 진행 중인 더 큰 추적의 일부임을 알기 위해 추적 전파 정보를 추출하는 데 필요합니다.
:x_headers - all request headers that have an "x-" prefix
:uri - a %URI{} with information from the conn
:user_agent - the value of the "user-agent" request header
{:session, session_config} - Plug.Conn의 세션 정보. session_config는 Plug.Session에 제공된 인수의 정확한 사본입니다. 이를 위해서는 소켓에 연결할 때 URI.encode_www_form(Plug.CSRFProtection.get_csrf_token()) 값과 함께 요청 매개변수로 "_csrf_token"을 제공해야 합니다. 런타임 {MyAppWeb.Auth, :get_session_config, []}에서 구성 로드를 허용하는 MFA일 수도 있습니다. 그렇지 않으면 세션이 0이 됩니다.
임의의 키워드는 위의 유효한 키 다음에 나타날 수도 있습니다. 이는 소켓에 사용자 지정 연결 정보를 전달하는 데 유용합니다.
예를 들어:
socket "/socket", AppWeb.UserSocket,
websocket: [
connect_info: [:peer_data, :trace_context_headers, :x_headers, :uri, session: [store: :cookie]]
]
임의의 키워드로:
socket "/socket", AppWeb.UserSocket,
websocket: [
connect_info: [:uri, custom_value: "abcdef"]
]
다음 구성은 :websocket에만 적용됩니다.
:timeout - 마지막으로 데이터를 수신한 후 웹 소켓 연결을 열린 상태로 유지하기 위한 시간 초과, 기본값은 60_000ms입니다.
:max_frame_size - 최대 허용 프레임 크기(바이트), 기본값은 "무한대"입니다.
:fullsweep_after - 소켓 프로세스에 대한 전체 스윕을 강제 실행하기 전의 최대 가비지 컬렉션 수입니다. 0으로 설정하면 웹 소켓 전송 프로세스를 더 자주 정리할 수 있습니다. 이 옵션을 설정하려면 Erlang/OTP 24가 필요합니다.
:compress - 모든 데이터 프레임에서 메시지당 압축을 활성화할지 여부, 기본값은 false
:subprotocols - 지원되는 웹 소켓 하위 프로토콜 목록입니다. 핸드셰이크 Sec-WebSocket-Protocol 응답 헤더에 사용되며 기본값은 nil입니다.
예를 들어:
subprotocols: ["sip", "mqtt"]
예를 들어:
error_handler: {MySocket, :handle_error, []}
{:error, :rate_limit} 반환은 MySocket에서 다음과 같이 처리될 수 있습니다.:
def handle_error(conn, :rate_limit), do: Plug.Conn.send_resp(conn, 429, "Too many requests")
다음 구성은 :longpoll에만 적용됩니다.
:window_ms - 클라이언트가 폴 요청에서 새 메시지를 기다릴 수 있는 시간, 기본값은 10_000ms입니다.
:pubsub_timeout_ms - 요청이 pubsub 계층이 응답할 때까지 대기할 수 있는 시간, 기본값은 2000ms입니다.
:crypto - Phoenix.Token에서 허용하는 토큰 확인 및 서명 옵션. 기본적으로 토큰은 2주 동안 유효합니다.