0

我创建了一个简单的颤振应用程序来提供我的电话目录(/​​ 的索引)以与 PC 共享我的文件。
(我使用 IDM(Internet 下载管理器)下载文件)它适用于小文件,但是当我将大文件下载到 PC 时,应用程序会自动关闭。(这里我尝试下载691MB文件)因为它创建了 8 个下载连接。

如何在此代码中为单个客户端设置最大连接限制?(例如通过最多 2 个连接下载文件)

(使用 HttpServer 和 VirtualDirectory 实现。)

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

HttpServer server;

startServer() async {

// Created VirtualDirectory Variable named staticFiles
  VirtualDirectory staticFiles = VirtualDirectory('/storage/emulated/0')
    ..allowDirectoryListing = true
    ..jailRoot = false;

// Started the server
  server = await HttpServer.bind(InternetAddress.anyIPv4, 7766);

// Serve the directory (Index of/)
  server.listen((req) {
    staticFiles.serveRequest(req);
  });
}

stopServer() {
//Stop the Server
  server.close();
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Center(
          child: Text('Server Test'),
        ),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          RaisedButton(
            child: Text('Start Server'),
            onPressed: startServer,
          ),
          RaisedButton(
            child: Text('Stop Server'),
            onPressed: stopServer,
          ),
        ],
      ),
    );
  }
}

安装的依赖项:

dependencies:
  http_server: ^0.9.8+3

确保您启用了READ_EXTERNAL_STORAGE权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

应用程序在本地网络上工作

URL=> gatewayIP:7766(如果您从手机创建 wifi 热点并将其连接到 PC,则很可能是http://192.168.43.1:7766 )

请帮我解决这个问题。

ps:当我再次打开应用程序并单击startServer时,文件下载会恢复。

编辑:我使用 IDM(Internet 下载管理器)下载导致崩溃的文件,但是当我过去从浏览器下载文件时它工作正常。

4

1 回答 1

1

connectionsInfo()在 dart:io 库中找到了 API

connectionsInfo()API 我们可以访问四种类型的值/属性:Total, Active, Idle,Closeing 请参阅 HttpConnectionsInfo 类文档

为了限制最大连接,我们必须if-else在服务器监听客户端请求时使用语句:

...
//_server is an httpServer
_server.listen((req){

    int maxConnection = 4;
    
    //if active connections are more than maxConnection than server will not response to any request
    if(_server.connectionsInfo().active <= maxConnection){
    
        staticFiles.serveRequest(req);
        // Or Your Logic for request response...
        
    }
});
...
于 2021-02-27T18:18:24.523 回答