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);
   }
};