WebSockets - 服务器工作过程

Web Socket 服务器是一个简单的程序,它能够处理 Web Socket 事件和操作。 它通常向 Web Socket 客户端 API 公开类似的方法,并且大多数编程语言都提供实现。 下图说明了 Web Socket 服务器和 Web Socket 客户端之间的通信过程,重点介绍了触发的事件和操作。

下图展示了Web Socket服务器端和客户端的事件触发 −

Server Client

连接到 Web 服务器

Web Socket 服务器的工作方式与 Web Socket 客户端类似。 它响应事件并在必要时执行操作。 无论使用哪种编程语言,每个 Web Socket 服务器都会执行一些特定的操作。

它被初始化为一个Web Socket地址。 它处理 OnOpen、OnClose、 和 OnMessage 事件,并向客户端发送消息。

创建 Web Socket 服务器实例

每个 Web Socket 服务器都需要一个有效的主机和端口。 在服务器中创建Web Socket实例的示例如下 −

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() 方法只是将所需的消息传输到指定的客户端。 使用 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);
   }
};