WebSocket 指南

欢迎使用 Finch WebSocket 指南!本指南将引导您完成在 Finch 应用程序中使用 WebSocket 的步骤。无论您是经验丰富的开发人员还是刚刚起步,Finch 都提供了一套强大的工具来简化服务器端 Web 应用程序开发。

在 Finch 中使用 WebSocket

要为 Finch 应用程序定义 WebSocket,您需要使用 SocketManager 类。SocketManager 类用于管理 Finch 应用程序中的 WebSocket 连接。它包含管理 WebSocket 连接所需的所有属性。然后您可以使用 addSocketRoute 方法将 WebSocket 路由添加到 Finch 应用程序。之后,您可以使用 socketController 来处理 WebSocket 连接。

SocketManager

SocketManager 类用于管理 Finch 应用程序中的 WebSocket 连接。它包含管理 WebSocket 连接所需的所有属性。以下是使用示例:

final socketManager = SocketManager(
  app,
  event: SocketEvent(
    onConnect: (socket) {
      app.socketManager?.sendToAll(
        "New user connected! count: ${app.socketManager?.countClients}",
        path: "output",
      );
      socket.send(
        {'message': 'Soccuess connect to socket!'},
        path: 'connected',
      );
    },
    onMessage: (socket, data) {},
    onDisconnect: (socket) {
      var count = app.socketManager?.countClients ?? 0;
      app.socketManager?.sendToAll(
        "User disconnected! count: ${count - 1}",
        path: "output",
      );
    },
  ),
  routes: getSocketRoute(),
);

SocketEvent

SocketEvent 类用于定义可在 WebSocket 连接中触发的事件。它包含定义事件所需的所有属性。以下是使用示例:

  'time': SocketEvent(
      onMessage: (socket, data) {
        socket.send(DateTime.now().toString(), path: 'output');
      },
    ),

WebSocket 路由

WebSocket 路由在 getSocketRoute 函数中定义。此函数返回包含所有 WebSocket 路由的 Map<String, SocketEvent>。以下是使用示例:

Map<String, SocketEvent> getSocketRoute() {
  return {
    'test': SocketEvent(
      onMessage: (socket, data) {
        socket.send([socket.rq.headers], path: 'test');
      },
    ),
  };
}

将 socket 路由添加到 FinchApp

getSocketRoute() 是一个返回 Map<String, SocketEvent> 的函数。您可以使用 addSocketRoute 方法将其添加到 FinchApp 实例。以下是使用示例:

class SocketController exatends Controller {
  Future<String> socket() async {
    await socketManager.requestHandle(rq);
    return rq.renderSocket();
  }
}
FinchRoute(
    key: 'root.ws',
    path: '/ws',
    methods: Methods.ALL,
    index: socketController.socket,
),