Flutter轻量级服务器插件server_nano的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter轻量级服务器插件server_nano的使用

server_nano 是一个用Dart编写的轻量、非常快速且友好的HTTP/WebSocket服务器。它具有以下特点:

  • 轻量:最小的占用空间,以实现最佳效率。
  • 快速:在各个方面都优先考虑性能。
  • 友好:为新手和专家量身定制的直观API。

🚀 快速开始

安装

要将 server_nano 集成到你的Dart项目中,请运行以下命令:

dart pub add server_nano

基本使用

下面是一个基本示例,帮助你快速上手:

import 'package:server_nano/server_nano.dart';

void main() {
  final server = Server();

  // 同步请求
  server.get('/', (req, res) {
    res.send('Hello World!');
  });

  // 异步请求
  server.get('/user/:id', (req, res) async {
    // 模拟数据库查询延迟
    await Future.delayed(Duration(seconds: 2));
    res.send('Hello User ${req.params['id']}!');
  });

  // WebSocket支持
  server.ws('/socket', (socket) {
    socket.onMessage((message) {
      print(message);
    });

    // 房间支持
    socket.join('dev-group');

    socket.emitToRoom(
        'connected', 'dev-group', 'User ${socket.id} connected to dev-group');
  });

  server.listen(port: 3000);
}

性能如何?

server_nano 的设计目标是尽可能快。以下是在MacBook Pro M1上的性能测试结果:

@MacBook-Pro ~ % wrk -t 6 -c 120 -d 10s --latency http://localhost:3000/
Running 10s test @ http://localhost:3000/
  6 threads and 120 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.83ms    4.60ms  93.28ms   96.85%
    Req/Sec    17.12k     3.03k   20.57k    90.17%
  Latency Distribution
     50%    1.02ms
     75%    1.38ms
     90%    2.01ms
     99%   28.34ms
  1022096 requests in 10.00s, 212.49MB read
Requests/sec: 102164.16
Transfer/sec:     21.24MB

为什么选择 server_nano

  • 性能server_nano 设计为尽可能快。
  • 友好的APIserver_nano 提供了易于使用的直观API,类似于Express.js但更快。
  • WebSocket支持server_nano 支持开箱即用的WebSocket。
  • 中间件server_nano 支持中间件来帮助你操作请求和响应对象。
  • 静态文件服务server_nano 支持开箱即用的服务静态文件。
  • 安全性server_nano 支持HTTPS,并有一个头盔中间件来缓解常见的Web漏洞。
  • 跨平台server_nano 是跨平台的,可以在任何东西上运行。
  • 开源server_nano 是开源的,免费使用。
  • 最小占用空间server_nano 具有最小的占用空间,以实现最佳效率。你可以在几分钟内阅读整个源代码。

示例Demo

以下是一个完整的示例,展示了如何使用 server_nano 创建一个简单的服务器,包括HTTP路由、WebSocket支持和静态文件服务:

import 'package:server_nano/server_nano.dart';

void main() {
  final server = Server();

  // HTTP GET 路由
  server.get('/', (req, res) {
    res.sendJson({'Hello': 'World!'});
  });

  server.get('/user/:id', (req, res) async {
    await Future.delayed(Duration(seconds: 2));
    res.send('Hello User ${req.params['id']}!');
  });

  // WebSocket 路由
  server.ws('/socket', (socket) {
    socket.onMessage((message) {
      print(message);
    });

    socket.join('tech-group');

    socket.emitToRoom(
        'connected', 'tech-group', 'User connected to tech-group');
  });

  // 服务静态文件
  server.static('/path/to/static/files', listing: true, links: true, jail: true);

  // 监听端口
  server.listen(port: 3000, wsPort: 3001);
}

中间件示例

以下是使用Helmet中间件保护应用程序免受常见Web漏洞的示例:

server.use(Helmet());

HTTPS支持

你可以通过提供SSL/TLS证书详细信息使服务器通过HTTPS服务:

server.listen(
  host: '0.0.0.0',
  port: 8080,
  certificateChain: 'path_to_certificate_chain.pem',
  privateKey: 'path_to_private_key.pem',
  password: 'optional_password_for_key',
);

希望这些示例能帮助你更好地理解和使用 server_nano!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter轻量级服务器插件server_nano的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter轻量级服务器插件server_nano的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,server_nano 是一个轻量级的服务器插件,用于在Flutter应用中创建嵌入式HTTP服务器。虽然Flutter主要用于构建跨平台的移动和桌面应用,但在某些特定场景下(如开发调试、嵌入式设备等),你可能需要在Flutter应用中运行一个本地服务器。

以下是一个简单的示例,展示如何在Flutter应用中使用 server_nano 插件来创建一个基本的HTTP服务器,并处理GET请求。

步骤 1: 添加依赖

首先,在你的 pubspec.yaml 文件中添加 server_nano 依赖:

dependencies:
  flutter:
    sdk: flutter
  server_nano: ^最新版本号  # 请替换为最新的版本号

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

步骤 2: 使用 server_nano 创建服务器

接下来,在你的Flutter应用中编写代码来启动服务器并处理请求。下面是一个简单的示例,展示了如何在 main.dart 文件中实现这一点:

import 'package:flutter/material.dart';
import 'dart:io';
import 'package:server_nano/server_nano.dart';

void main() {
  // 启动Flutter应用
  runApp(MyApp());

  // 启动HTTP服务器
  startServer();
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Server Nano Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Server Nano Demo'),
      ),
      body: Center(
        child: Text('Server is running on http://localhost:8080'),
      ),
    );
  }
}

void startServer() async {
  // 创建一个HTTP服务器并监听指定端口
  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 8080);
  print('Server listening on http://${server.address.address}:${server.port}');

  // 处理GET请求
  server.listen((HttpRequest request) {
    if (request.method == 'GET') {
      request.response
        ..statusCode = HttpStatus.ok
        ..headers.set('content-type', 'text/plain')
        ..write('Hello, Flutter Server Nano!')
        ..close();
    } else {
      request.response
        ..statusCode = HttpStatus.methodNotAllowed
        ..close();
    }
  });
}

注意事项

  1. 权限问题:在移动设备上运行本地服务器可能受到操作系统的限制,特别是iOS。通常,这种方式更适合桌面应用或开发调试。

  2. 端口占用:确保所选端口没有被其他应用占用,否则服务器将无法启动。

  3. 调试与测试:在桌面平台上(如Windows、macOS或Linux)进行调试和测试通常更容易,因为这些平台对本地服务器的限制较少。

  4. 安全性:在生产环境中,直接在Flutter应用中运行服务器通常不是最佳实践。考虑使用更专业的后端解决方案来处理服务器逻辑。

通过上述代码,你可以在Flutter应用中创建一个基本的HTTP服务器,并处理GET请求。这对于开发调试或特定应用场景下的嵌入式服务器需求非常有用。

回到顶部