WebSockets-서버 작동

웹 소켓 서버는 웹 소켓 이벤트 및 작업을 처리 할 수있는 간단한 프로그램입니다. 일반적으로 웹 소켓 클라이언트 API에 유사한 메소드를 노출하고 대부분의 프로그래밍 언어가 구현을 제공합니다. 다음 다이어그램은 트리거 된 이벤트 및 조치를 강조하여 웹 소켓 서버와 웹 소켓 클라이언트 간의 통신 프로세스를 보여줍니다.

다음 다이어그램은 웹 소켓 서버 및 클라이언트 이벤트 트리거를 보여줍니다.

웹 서버에 연결

웹 소켓 서버는 웹 소켓 클라이언트와 유사한 방식으로 작동합니다. 이벤트에 응답하고 필요한 경우 작업을 수행합니다. 사용되는 프로그래밍 언어에 관계없이 모든 웹 소켓 서버는 특정 작업을 수행합니다.

웹 소켓 주소로 초기화됩니다. 그것은 처리OnOpen, OnClose,OnMessage 이벤트 및 클라이언트에도 메시지를 보냅니다.

웹 소켓 서버 인스턴스 생성

모든 웹 소켓 서버에는 유효한 호스트와 포트가 필요합니다. 서버에서 웹 소켓 인스턴스를 생성하는 예는 다음과 같습니다.

var server = new WebSocketServer("ws://localhost:8181");

이전에 사용되지 않은 포트 사양과 함께 유효한 URL을 사용할 수 있습니다. 서로 다른 데이터로 세부 정보를 제공하거나 각각 다른 메시지를 보내므로 연결된 클라이언트의 기록을 유지하는 것이 매우 유용합니다.

Fleck은 들어오는 연결 (클라이언트)을 IwebSocketConnection상호 작용. 누군가가 우리 서비스에 연결하거나 연결을 끊을 때마다 빈 목록을 만들거나 업데이트 할 수 있습니다.

var clients = new List<IWebSocketConnection>();

그 후, 우리는 Start메서드를 사용하고 클라이언트가 연결될 때까지 기다립니다. 시작 후 서버는 들어오는 연결을 수락 할 수 있습니다. Fleck에서 Start 메소드에는 이벤트를 발생시킨 소켓을 나타내는 매개 변수가 필요합니다.

server.Start(socket) =>
{
});

OnOpen 이벤트

그만큼 OnOpen이벤트는 새 클라이언트가 액세스를 요청했음을 확인하고 초기 핸드 셰이크를 수행합니다. 클라이언트를 목록에 추가해야하며 IP 주소와 같은 관련 정보를 저장해야합니다. Fleck은 그러한 정보와 연결에 대한 고유 식별자를 제공합니다.

server.Start(socket) ⇒ {

   socket.OnOpen = () ⇒ {
      // Add the incoming connection to our list.
      clients.Add(socket);
   }
	
   // Handle the other events here...
});

OnClose 이벤트

그만큼 OnClose클라이언트 연결이 끊어 질 때마다 이벤트가 발생합니다. 클라이언트가 목록에서 제거되고 연결 해제에 대해 나머지 클라이언트에게 알립니다.

socket.OnClose = () ⇒ {
   // Remove the disconnected client from the list.
   clients.Remove(socket);
};

OnMessage 이벤트

그만큼 OnMessage클라이언트가 서버에 데이터를 보낼 때 이벤트가 발생합니다. 이 이벤트 처리기 내에서 들어오는 메시지는 클라이언트로 전송되거나 클라이언트 중 일부만 선택할 수 있습니다.

과정은 간단합니다. 이 핸들러는message 매개 변수로-

socket.OnMessage = () ⇒ {
   // Display the message on the console.
   Console.WriteLine(message);
};

보내기 () 방법

그만큼 Send()메소드는 단순히 원하는 메시지를 지정된 클라이언트로 전송합니다. Send ()를 사용하여 텍스트 또는 이진 데이터를 클라이언트에 저장할 수 있습니다.

작업 OnMessage 이벤트는 다음과 같습니다-

socket.OnMessage = () ⇒ {
   foreach (var client in clients) {
      // Send the message to everyone!
      // Also, send the client connection's unique identifier in order
      // to recognize who is who.
      client.Send(client.ConnectionInfo.Id + " says: " + message);
   }
};