【问题标题】:Embedding Mongoose Web Server in C++在 C++ 中嵌入 Mongoose Web 服务器
【发布时间】:2011-08-08 11:48:26
【问题描述】:

我刚刚将 Mongoose Web 服务器嵌入到我的 C++ dll 中(只是一个头文件,在大多数堆栈溢出线程中都推荐使用),并且我使用非常少的示例代码将其启动并正常运行。

但是,我很难找到有关配置 Web 服务器的基本必需品的任何类型的教程、示例等。我需要弄清楚以下...

1) 如何允许目录浏览

2 是否可以限制文件的下载速度?

3) 是否可以有一个允许下载文件的 IP 地址的动态列表?

4) 如何允许下载特定的文件扩展名(在这种情况下为.bz2) 回答

5) 如何绑定到特定的 IP 地址 回答

我发现的大部分信息都是关于使用预编译的二进制版本,所以我现在有点难过。任何帮助都会很棒!

【问题讨论】:

    标签: c++ webserver mongoose-web-server


    【解决方案1】:

    1) “启用目录列表”选项

    2) 未内置于 Mongoose(至少不是我拥有的版本,大约 6 个月大)。 [编辑:] 较新版本的 Mongoose 支持 throttling 下载速度。从手册...

    限制客户端的下载速度。油门是一个逗号分隔的列表 键=值对,其中键可以是:

    *                   limit speed for all connections
    x.x.x.x/mask        limit speed for specified subnet
    uri_prefix_pattern  limit speed for given URIs
    

    该值是每秒字节的浮点数,可选 后跟一个 k 或 m 字符,表示千字节和兆字节 分别。限制为 0 表示无限速率。最后一次匹配 规则获胜。例子:

    *=1k,10.0.0.0/8=0   limit all accesses to 1 kilobyte per second,
                        but give connections from 10.0.0.0/8 subnet
                        unlimited speed
    
    /downloads/=5k      limit accesses to all URIs in `/downloads/` to
                        5 kilobytes per secods. All other accesses are unlimited
    

    3) “access_control_list”选项。在代码accept_new_connection 中调用check_acl,它将客户端的IP 与要接受和/或忽略的IP 列表进行比较。从手册...

    指定访问控制列表 (ACL)。 ACL 是一个逗号分隔的 IP 列表 子网,每个子网都以“-”或“+”号开头。加号的意思 允许,减号表示拒绝。如果省略子网掩码,如“-1.2.3.4”, 那么这意味着单个IP地址。掩码可能从 0 到 32 不等。 在每个请求上,都会遍历完整列表,最后一场比赛获胜。默认 设置是允许所有。例如,只允许 192.168/16 子网 连接,运行“猫鼬 -0.0.0.0/0,+192.168/16"。默认值:""

    http://code.google.com/p/mongoose/wiki/MongooseManual

    【讨论】:

      【解决方案2】:

      当然,一旦我放弃并发布,我发现大部分答案就在我面前。这是他们的选择...

      const char *options[] =
      {
          "document_root", "C:/",
          "listening_ports", "127.0.0.1:8080",
          "extra_mime_types", ".bz2=plain/text",
          NULL
      };
      

      但是,我仍然不确定如何启用目录浏览。现在,我的回调函数只是示例中的基本函数(如下所示)。我需要做什么才能得到它以便列出文件?

      static void *callback(enum mg_event event, struct mg_connection *conn, const struct mg_request_info *request_info)
      {
          if (event == MG_NEW_REQUEST)
          {
              // Echo requested URI back to the client
              mg_printf(conn, "HTTP/1.1 200 OK\r\n"
                  "Content-Type: text/plain\r\n\r\n"
                  "%s", request_info->uri);
      
              return "";  // Mark as processed
          }
          else
          {
              return NULL;
          }
      }
      

      【讨论】:

      • 您的回调会为每个请求(包括目录请求)调用,并通过返回非 NULL 将其标记为已处理。如果已请求目录,则需要返回 NULL。 Mongoose 然后显示目录,除非“enable_directory_listing”选项设置为“no”。在最简单的情况下, if (!strcmp(request_info->uri, "/")) { return NULL; }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 2013-06-17
      • 1970-01-01
      相关资源
      最近更新 更多