Flutter物联网通信插件nebula_mesh_toolkit的使用

Flutter物联网通信插件nebula_mesh_toolkit的使用

写作 nebula.yml 配置文件

NebulaConfig 是一个描述 Nebula 配置的类型化配置类层次结构。创建对象后,可以轻松生成 YAML 文件内容:

final config = NebulaConfig(
  pki: PkiConfig(/* ... */),
  staticHostMap: { '192.168.10.1': ['lighthouse-ip.example.com:4242']},
  /* ... */
);
print(config.toYamlString()); // 打印 YAML 内容到标准输出

定义网络并生成工件

通常,Nebula 节点的配置中会有一些重复的模式。通过将节点定义为模板的一部分,可以将这些重复的部分保持在单一来源中,从而保持一致性。例如,以下描述了一个简单的具有某些角色的网络:

domain: neb.internal
cipher: aes
expiry: 182d
keep: 45d

templates:
  - groups: ['lighthouse']
    listen:
      host: '0.0.0.0'
      port: 4242
    relay:
      am_relay: true
    firewall_presets: [any]
    hosts:
      - name: lighthouse-1
        address: 192.168.100.1/24
        publicAddresses: ['nebula.example.com:4242', '12.34.56.78:4242']

  - groups: ['server']
    punchy:
      punch: true
    relay:
      relays: ['@lighthouse'] # 可以用 `@<group-name>` 引用中继
    firewall_presets: [any]   # 目前只定义了 `any` 预设
    hosts:
      - name: server-1
        address: 192.168.100.10/24
  
  - groups: ['admin']
    # 注意:没有 `address` 字段的主机将从第一个网络 CIDR 自动分配地址
    hosts:
      - name: notebook-1
        os: windows
      - name: mobile-1
        os: android

工件生成创建以下输出结构:

|- ca
|  |- keys
|  |  |- <not-before-timestamp>-<fingerprint>.crt
|  |  |- <not-before-timestamp>-<fingerprint>.crt.json
|  |  |- <not-before-timestamp>-<fingerprint>.crt.key
|  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.crt
|  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.crt.json
|  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.crt.key
|  |- neb.internal.ca.crt
|- etc
|  |- neb.internal.hosts
|- hosts
|  |- lighthouse-1
|  |  |- bin
|  |  |  |- nebula
|  |  |  |- nebula-cert
|  |  |- certs
|  |  |  |- <ca-key>.crt
|  |  |  |- <ca-key>.crt.json
|  |  |  |- <ca-key>.png
|  |  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.crt
|  |  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.crt.json
|  |  |  |- 20241213202756-2a3ebc600e3211203a158e1ddbb9b4d2b4f53d7b70280d8a433a1ebf4f2aa9a8.png
|  |  |- etc
|  |    |- neb.internal.ca.crt
|  |    |- neb.internal.hosts
|  |    |- lighthouse-1.neb.internal.crt
|  |    |- lighthouse-1.neb.internal.key
|  |    |- lighthouse-1.neb.internal.pub
|  |    |- lighthouse-1.neb.internal.yml
|  |- server-1
|  |  |- ...
|  |- notebook-1
|  |  |- ...
|  |- mobile-1
|     |- ...

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用nebula_mesh_toolkit插件进行物联网通信的示例代码。这个插件通常用于与Nebula Graph物联网平台通信。请注意,为了简化示例,假设你已经有一个运行中的Nebula Graph实例,并且已经配置好了必要的认证信息。

首先,确保你已经在pubspec.yaml文件中添加了nebula_mesh_toolkit依赖:

dependencies:
  flutter:
    sdk: flutter
  nebula_mesh_toolkit: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中创建一个服务类来处理与Nebula Graph的通信。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:nebula_mesh_toolkit/nebula_mesh_toolkit.dart';

class NebulaService {
  NebulaClient? _client;

  NebulaService({required String graphHost, required int graphPort, required String user, required String password}) {
    // 初始化Nebula客户端
    _client = NebulaClient(
      graphHost: graphHost,
      graphPort: graphPort,
      user: user,
      password: password,
    );

    // 连接到Nebula Graph
    _connect();
  }

  Future<void> _connect() async {
    try {
      await _client!.connect();
      print('Connected to Nebula Graph');
    } catch (e) {
      print('Failed to connect to Nebula Graph: $e');
    }
  }

  Future<Map<String, dynamic>> executeQuery(String query) async {
    try {
      var result = await _client!.executeQuery(query);
      return result;
    } catch (e) {
      print('Failed to execute query: $e');
      return {};
    }
  }

  Future<void> close() async {
    await _client!.close();
    print('Disconnected from Nebula Graph');
  }
}

现在,你可以在你的Flutter应用中使用这个服务类来执行查询。以下是一个简单的示例,展示如何在Flutter应用中集成并使用这个服务:

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late NebulaService nebulaService;
  String? queryResult;

  @override
  void initState() {
    super.initState();

    // 初始化Nebula服务(替换为你的Nebula Graph实例信息)
    nebulaService = NebulaService(
      graphHost: 'your_nebula_graph_host',
      graphPort: your_nebula_graph_port, // 例如:9669
      user: 'your_username',
      password: 'your_password',
    );

    // 执行查询
    _executeQuery();
  }

  Future<void> _executeQuery() async {
    String query = 'MATCH (n) RETURN n LIMIT 10'; // 示例查询
    var result = await nebulaService.executeQuery(query);
    setState(() {
      queryResult = result.toString();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nebula Graph Flutter Example'),
        ),
        body: Center(
          child: Text(queryResult ?? 'Loading...'),
        ),
      ),
    );
  }

  @override
  void dispose() {
    nebulaService.close();
    super.dispose();
  }
}

在这个示例中,我们创建了一个NebulaService类来处理与Nebula Graph的连接和查询。然后在Flutter应用中,我们在initState方法中初始化了这个服务并执行了一个示例查询。查询结果被显示在应用的主屏幕上。

请注意,这只是一个基本的示例。在实际应用中,你可能需要处理更多的错误情况、优化连接管理,并根据你的具体需求定制查询逻辑。此外,确保遵循最佳实践来保护你的认证信息,比如使用环境变量或安全存储。

回到顶部