Flutter WebSocket通信插件cc_web_socket的使用

Flutter WebSocket通信插件cc_web_socket的使用

CC WebSocket 提供了一个强大的且灵活的 WebSocket 客户端,适用于 Flutter 应用程序。此插件允许您轻松管理和自定义 WebSocket 连接。

特性

  • 简单初始化:通过简单的配置选项快速建立 WebSocket 连接。
  • 超时和心跳设置:可以自定义连接超时时间和心跳间隔。
  • 自动重连:当连接丢失时自动重新连接。
  • 详细日志记录:可以选择记录连接状态、请求和响应。
  • 模块化结构:通过插件和模块扩展功能。

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  cc_web_socket: ^1.0.0

使用

初始化

要初始化 CCWebSocket,请使用以下代码:

CCWebSocket.init(
  socketOptions: CCSocketOptions(
    uri: Uri(
      scheme: "wss",
      host: "echo.websocket.org",
      port: 443,
      path: ".ws",
    ),
    connectTimeout: const Duration(seconds: 5),
    pingInterval: const Duration(seconds: 120),
    requestTypeName: "request_type",
    autoConnect: true,
  ),
  loggingOptions: CCSocketLogging(
    logEnabled: true,
    onConnection: (prompt) {},
    onReconnection: (prompt) {},
    onClosed: (prompt) {},
    onRequest: (prompt) {},
    onResponse: (prompt) {},
    onError: (prompt) {},
  ),
  modules: [
    Example(),
  ],
);

注意 requestTypeName 参数是在 JSON 内容中匹配返回数据正确模块的标识符。

连接

要发起 WebSocket 连接,请使用以下代码:

CCWebSocket.connect();

模块使用

通过模块发送请求:

CCWebSocket.getModule<Example>().request(
  body: {
    "request_type": "Unknown",
  },
);

示例模块

您可以创建自己的模块,定义一个类如下:

class Example extends RequestModule {
  [@override](/user/override)
  void request({required Map<String, dynamic> body}) {
    super.request(body: body);
  }

  [@override](/user/override)
  void response(dynamic response) {}
}

或者只处理响应:

class Example extends RequestModule {
  [@override](/user/override)
  void response(dynamic response) {}
}

贡献

如果您想贡献,请提交拉取请求或打开一个问题。我们非常重视所有类型的反馈。

许可证

该项目在 MIT 许可证下发布。更多详情请参阅 LICENSE 文件。


完整示例 Demo

以下是一个完整的示例,展示了如何使用 cc_web_socket 插件来实现 WebSocket 通信:

import 'package:flutter/material.dart';
import 'package:cc_web_socket/src/socket/socket_options.dart';
import 'package:cc_web_socket/src/socket/web_socket_client.dart';
import 'package:cc_web_socket/src/request/modules/request_module.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('WebSocket Demo')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 初始化 WebSocket
              CCWebSocket.init(
                socketOptions: CCSocketOptions(
                  uri: Uri(
                    scheme: "wss",
                    host: "echo.websocket.org",
                    port: 443,
                    path: ".ws",
                  ),
                  connectTimeout: const Duration(seconds: 5),
                  pingInterval: const Duration(seconds: 120),
                  requestTypeName: "request_type",
                  autoConnect: true,
                ),
                loggingOptions: CCSocketLogging(
                  logEnabled: true,
                  onConnection: (prompt) {},
                  onReconnection: (prompt) {},
                  onClosed: (prompt) {},
                  onRequest: (prompt) {},
                  onResponse: (prompt) {},
                  onError: (prompt) {},
                ),
                modules: [
                  Example(),
                ],
              );

              // 发起连接
              CCWebSocket.connect();

              // 发送请求
              CCWebSocket.getModule<Example>().request(
                body: {
                  "request_type": "Unknown",
                },
              );
            },
            child: Text('Connect WebSocket'),
          ),
        ),
      ),
    );
  }
}

// 示例模块
class Example extends RequestModule {
  [@override](/user/override)
  void request({required Map<String, dynamic> body}) {
    super.request(body: body);
  }

  [@override](/user/override)
  void response(dynamic response) {
    print("Response received: $response");
  }
}

更多关于Flutter WebSocket通信插件cc_web_socket的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter WebSocket通信插件cc_web_socket的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cc_web_socket 是一个用于在 Flutter 中进行 WebSocket 通信的插件。它提供了一个简单的接口,允许开发者轻松地与 WebSocket 服务器进行通信。以下是使用 cc_web_socket 插件的基本步骤和示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cc_web_socket 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  cc_web_socket: ^0.1.0  # 请确认使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 cc_web_socket 插件:

import 'package:cc_web_socket/cc_web_socket.dart';

3. 创建 WebSocket 连接

使用 CcWebSocket 类来创建和管理 WebSocket 连接。以下是一个简单的示例:

class WebSocketExample extends StatefulWidget {
  [@override](/user/override)
  _WebSocketExampleState createState() => _WebSocketExampleState();
}

class _WebSocketExampleState extends State<WebSocketExample> {
  late CcWebSocket _webSocket;
  String _message = "";

  [@override](/user/override)
  void initState() {
    super.initState();
    _connectToWebSocket();
  }

  void _connectToWebSocket() {
    _webSocket = CcWebSocket(
      url: 'ws://your.websocket.server', // WebSocket 服务器地址
      onOpen: () {
        print('WebSocket connection opened');
      },
      onMessage: (message) {
        setState(() {
          _message = message;
        });
      },
      onClose: () {
        print('WebSocket connection closed');
      },
      onError: (error) {
        print('WebSocket error: $error');
      },
    );
  }

  void _sendMessage(String message) {
    _webSocket.send(message);
  }

  [@override](/user/override)
  void dispose() {
    _webSocket.close();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebSocket Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Received: $_message'),
            ElevatedButton(
              onPressed: () => _sendMessage('Hello, WebSocket!'),
              child: Text('Send Message'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部