Socket.IO는 실시간 웹 애플리케이션을 위한 JavaScript 라이브러리입니다. 웹 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 합니다. 두 부분으로 구성됩니다: 브라우저에서 실행되는 클라이언트 측 라이브러리와 Node.js용 서버 측 라이브러리. 두 구성 요소는 거의 동일한 API를 가지고 있습니다. Node.js와 마찬가지로 이벤트 기반입니다.
0: open (새 전송이 열릴 때 서버에서 전송됨(재확인))
1: close (이 전송을 닫도록 요청하지만 연결 자체를 종료하지는 않습니다.)
2: ping(클라이언트가 전송. 서버는 동일한 데이터를 포함한 pong 패킷으로 응답해야 합니다)
example
client sends: 2probe
server sends: 3probe
3: pong(ping 패킷에 응답하기 위해 서버가 전송.)
4: string message(실제 메시지로, 클라이언트와 서버는 데이터와 함께 콜백을 호출해야 합니다.)
example:
42/chat,[“join”,”{room:1}"]
4는 engine.io 프로토콜의 message packet 유형입니다
2는 socket.io 프로토콜의 EVENT 유형입니다
/chat은 socket.io가 처리하는 데이터입니다
socket.io는 "join" 이벤트를 발생시킵니다
"room: 1" 데이터를 전달합니다. namespace가 /일 때만 namespace를 생략할 수 있습니다.
5: upgrade (engine.io가 전송을 전환하기 전에 서버와 클라이언트가 이 전송을 통해 통신할 수 있는지 테스트합니다. 이 테스트가 성공하면 클라이언트는 서버가 이전 전송의 캐시를 플러시하고 새 전송으로 전환하도록 요청하는 upgrade 패킷을 보냅니다.)
6: noop (noop 패킷입니다. 주로 들어오는 WebSocket 연결이 수신될 때 폴 사이클을 강제하는 데 사용됩니다.)
API: SocketIO 버전을 지정합니다.
ioAPI0: socket.io 0.* 서버를 지원합니다(기본적으로 선택됨)
ioAPI1: socket.io 1.* 서버를 지원합니다
ioAPI2: socket.io 2.* 서버를 지원합니다.
ioAPI3: socket.io 3.* 서버를 지원합니다
ioAPI4: socket.io 4.* 서버를 지원합니다
Base64: 활성화되면 바이너리 메시지가 base64로 수신됩니다.
HandShakeCustomURL: socket.io 세션을 가져오는 URL을 사용자 정의할 수 있도록 합니다.
HandShakeTimestamp: 새 세션을 요청할 때 timestamp를 매개변수로 보내려는 경우에만 활성화하십시오(gevent-socketio python 서버에 액세스하려는 경우 이 속성을 활성화하십시오).
HandShakeAuthToken: 서버가 인증을 위한 토큰을 요구하면 여기에 인증 토큰을 설정하십시오.
Namespace: 서버에 연결할 때 namespace를 설정할 수 있습니다.
Polling: 이 속성을 비활성화하면 클라이언트는 websocket을 전송으로 사용하여 서버에 직접 연결합니다.
Parameters: 연결 매개변수를 설정할 수 있습니다.
EncodeParameters: 활성화되면 매개변수가 인코딩됩니다.
WriteData 메서드를 사용하여 socket.io 서버로 메시지를 보냅니다(Message Types 섹션을 따라).
1. 사용자 이름으로 John을 사용하여 매개변수 하나와 함께 "add user" 메서드를 호출하십시오.
WriteData('42["add user", "John"]');
새 websocket 연결이 설정되기 전에 socket.io 서버는 클라이언트가 새 세션 id를 가져오기 위해 새 HTTP 연결을 열도록 요구합니다. 경우에 따라 socket.io 서버는 HTTP 헤더를 사용한 인증을 요구합니다. 이 이벤트를 사용하여 Basic 권한 부여 또는 Bearer 토큰 인증과 같은 사용자 지정 HTTP 헤더를 추가할 수 있습니다.
이 이벤트는 socket.io 연결이 성공하고 클라이언트가 서버에 메시지를 보낼 수 있을 때 호출됩니다. 여기서 예를 들어 네임스페이스를 구독할 수 있습니다.
WebSocket 서버가 보안 연결을 요구할 때, 클라이언트가 서버에 연결하려고 시도하면 다음과 같은 오류 메시지가 표시될 수 있습니다:
Error connecting with SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
이 오류는 클라이언트가 서버에서 지원하지 않는 TLS 버전을 사용하여 연결하려고 함을 의미합니다.
이 오류를 해결하려면 WebSocket 클라이언트 구성 요소의 OnSSLAfterCreateHandler를 처리하고 최신 TLS 버전을 설정해야 합니다.
예: 여기에서 프로토콜 버전으로 TLS 1.2를 설정합니다.
procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;