API SocketIO

SocketIO

 

Socket.IO는 실시간 웹 애플리케이션을 위한 JavaScript 라이브러리입니다. 웹 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 합니다. 두 부분으로 구성됩니다: 브라우저에서 실행되는 클라이언트 측 라이브러리와 Node.js용 서버 측 라이브러리. 두 구성 요소는 거의 동일한 API를 가지고 있습니다. Node.js와 마찬가지로 이벤트 기반입니다.

 

Messages Types

 

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 연결이 수신될 때 폴 사이클을 강제하는 데 사용됩니다.)

 

Properties

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: 활성화되면 매개변수가 인코딩됩니다.

 

Methods

WriteData 메서드를 사용하여 socket.io 서버로 메시지를 보냅니다(Message Types 섹션을 따라).

1. 사용자 이름으로 John을 사용하여 매개변수 하나와 함께 "add user" 메서드를 호출하십시오.


WriteData('42["add user", "John"]');

Events

OnHTTPRequest

새 websocket 연결이 설정되기 전에 socket.io 서버는 클라이언트가 새 세션 id를 가져오기 위해 새 HTTP 연결을 열도록 요구합니다. 경우에 따라 socket.io 서버는 HTTP 헤더를 사용한 인증을 요구합니다. 이 이벤트를 사용하여 Basic 권한 부여 또는 Bearer 토큰 인증과 같은 사용자 지정 HTTP 헤더를 추가할 수 있습니다.

OnAfterConnect

이 이벤트는 socket.io 연결이 성공하고 클라이언트가 서버에 메시지를 보낼 수 있을 때 호출됩니다. 여기서 예를 들어 네임스페이스를 구독할 수 있습니다.

OnHTTPConnectionSSL

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;