当前位置: 首页 > news >正文

物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍

BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。

Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/。

特点

  • 轻量级:Boa 占用的系统资源极少,可在资源有限的嵌入式设备上高效运行,如路由器、智能家居设备等。

  • 开源:其源代码开放,便于开发者根据自身需求进行定制和优化,降低开发成本。

  • 简单易用:配置文件简单直观,易于理解和修改,降低了服务器的部署和管理难度。

  • 支持 CGI:支持通用网关接口(CGI),允许服务器与外部程序交互,实现动态网页功能。

工作原理

  • 网络连接处理:Boa 服务器监听指定的端口,等待客户端的连接请求。当有客户端发起连接时,服务器接受连接,并为该连接创建一个新的进程或线程来处理客户端的请求。

  • 请求解析:服务器接收客户端发送的 HTTP 请求,对请求进行解析,包括请求的方法(如 GET、POST 等)、请求的资源路径、请求头信息等。

  • 资源处理:根据请求的资源路径,服务器在文件系统中查找对应的资源文件。如果请求的是静态资源,如 HTML 文件、图片、CSS 文件等,服务器直接将该资源文件读取并发送给客户端。如果请求的是动态资源,如 CGI 脚本,服务器会调用相应的 CGI 程序来处理请求,并将 CGI 程序的输出结果发送给客户端。

  • 响应生成与发送:服务器根据请求的处理结果,生成 HTTP 响应消息,包括响应状态码、响应头信息和响应体。然后将响应消息发送给客户端,关闭连接。

应用场景

  • 智能家居控制:智能家居设备可以通过 Boa 服务器提供 Web 界面,用户通过浏览器即可方便地控制家电设备、查看环境数据等。

  • 工业自动化监控:在工业自动化领域,Boa 服务器可以用于搭建监控系统,实现对生产设备的远程监控和管理。

  • 物联网设备管理:物联网设备通常需要与云端或其他设备进行通信和交互,Boa 服务器可以作为设备的本地 Web 服务器,提供设备管理和配置的接口。

2、Boa服务器的编译

从www.boa.org下载Boa源码,当前最新版本为0.94.13,将其解压并进入源码目录的src子目录。

tar xzf boa-0.94.13.tar.gz

通过配置命令生成Makefile文件, 然后运行make进行编译,得到的可执行程序为boa。

//飞腾派OS系统编译boa服务器时会报缺少yacc、lex工具,通过下述命令安装
sudo apt-get install bison
sudo apt-get install flex
./configure
make

编译错误

将src下boa.c的第226行注释掉,重新编译下载即可。225	if(setuid(0) != -1) {
226	//	DIE(“icky Linux kernel bug!”);
227	}

修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

修改config.c中相关变量定义前加上extren
extern char *error_log_name;
extern char *access_log_name;
extern char *cgi_log_name; 

编译成功后会生成boa的可执行文件,可以当前目录通过sudo ./boa命令执行,或复制到/sbin目录通过sudo boa执行。

3、Boa服务器的配置

boa启动时需要一个配置文件boa.conf,该文件的缺省目录目录是:/etc/boa/,需要从源码目录中复制到/etc目录下。

$sudo mkdir /etc/boa
$sudo cp boa-0.94.13/boa.conf /etc/boa/
$sudo vim /etc/boa/boa.conf

(配置的时候,配置文件的目录可根据自己的情况设置路径,主要考虑到可写问题)

boa启动时需要一个配置文件boa.conf,该文件的缺省目录由src/defines.h文件的SERVER_ROOT定义,或者在启动boa的时候通过参数“-c”指定。其中指定的默认目录是:/etc/boa/

1. 建立/etc/boa目录, 并复制boa.conf到/etc/boa目录下,并按照以下步骤进行修改。

2. 修改访问权限:修改User nobody 为 User 0 ; 修改Group nogroup 为 Group 0

3. 设定日志目录:boa日志有两部分,Errorlog 和 AccessLog一般情况下为/var/log/boa/error_log 和 /var/log/boa/access_log两个文件。所以根据自己的情况情况设置日志目录:

ErrorLog /var/log/boa/error_log

AccessLog /var/log/boa/access_log

(注意:这里/var/log/boa目录必须为可写,否则会出项错误:log.c:73 – Unable to dup2 the error log: Bad file r.)

//修订访问权限
User 0
Group 0
//修改html文件在开发板的存放目录
DocumentRoot /home/user/boa_test/www/
//修改cgi文件在开发板的存放目录
ScriptAlias /cgi-bin/ /home/user/boa_test/www/cgi-bin/
  • 开发板目录与文件设置

//创建boa日志目录与相关文件
$sudo mkdir /var/log/boa
$sudo touch /var/log/boa/error_log
$sudo touch /var/log/boa/access_log
//设置可读写权限
$sudo chmod 666 /var/log/boa/*

4、Boa服务器使用

  • WEB服务器首页文件index.html
    写一个最简单的index.html文件,放在/home/user/boa_test/www/目录下(boa.conf文件中设定)。

<html>
<body>
<h1>Hello E2000-Pi BOA.</h1>
</body>
</html>
  • 启动boa服务器

$sudo boa
  • 浏览器访问

保证你的电脑同开发板是在一个局域网中,相互的ip应可以ping通。
打开电脑中浏览器在地址栏输入开发板的ip,访问成功的显示的网页界面。

常见问题:
无法访问–服务器没有启动。
404 提示–服务器启动,没有对应网页文件。

相关文章:

物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍 BOA 服务器是一个小巧高效的web服务器&#xff0c;是一个运行于unix或linux下的&#xff0c;支持CGI的、适合于嵌入式系统的单任务的http服务器&#xff0c;源代码开放、性能高。 Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/。 特点 轻量级&#x…...

vue3学习日记8 - 一级分类

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-17.Layout-Pinia优化重复请求_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博客 vue3学…...

前端实习第二个月小结

时间飞快&#xff0c;第一次实习已经过去两个多月&#xff0c;作一些简单的总结和分享。 注&#xff1a;文章整体会比较轻松&#xff0c;提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务&#xff0c;技术栈&#xff1a;前端re…...

深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术

深入了解卷积神经网络&#xff08;CNN&#xff09;&#xff1a;图像处理与深度学习的革命性技术 导语 卷积神经网络&#xff08;CNN&#xff09;是现代深度学习领域中最重要的模型之一&#xff0c;特别在计算机视觉&#xff08;CV&#xff09;领域具有革命性的影响。无论是图…...

b站视频(网页加客户端)+本地视频 生成回链

b站视频(网页加客户端)本地视频 生成回链 引言 基于上一篇博客方案 本地视频进度加入笔记根据进度快速锁定视频位置 我想着只有本地的话, 那b站上的视频, 不是每次都得下载下来吗? 如果是一套课程, 直接下载, 然后视频处理成mp3,还好, 如果只是一个视频, 每次这样处理就有点…...

3.数据库系统

3.1数据库的基本概念 3.1.1:数据库体系结构 3.1.1.1集中式数据库系统 数据是集中的 数据管理是集中的 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中在DBMS所在的计算机 3.1.1.2C/S结构 客户端负责数据表示服务服务器主要负责数据库服务 数据库系统分为前端和后端…...

红米k40s设备驱动设备驱动树

github地址# 链接https://github.com/autoandroida/vendor_xiaomi_munch...

Linux-C/C++--文件 I/O 基础

在 Linux 中&#xff0c;文件 I/O 是指通过系统调用或命令对文件进行的输入输出操作。Linux 操作系统提供了强大的文件操作功能&#xff0c;使得用户和程序可以方便地对文件进行读取、写入、修改和管理。文件 I/O 指的是对文 件的输入/输出操作&#xff0c;说白了就是对文件的读…...

HarmonyOS NEXT开发进阶(六):HarmonyOS NEXT实现嵌套 H5 及双向通信

文章目录 一、前言二、鸿蒙应用加载Web页面2.1 加载网络地址页面2.2 加载本地H5页面 三、实现Web组件 H5 层与鸿蒙应用层进行相互通讯3.1 鸿蒙应用向 H5 页面发送数据3.2 H5页面向鸿蒙应用发送数据 四、拓展阅读 一、前言 随着HarmonyOS NEXT的快速发展&#xff0c;越来越多的…...

【Flink系列】4. Flink运行时架构

4. Flink运行时架构 4.1 系统架构 Flink运行时架构——Standalone会话模式为例 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被…...

动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记

定义 动态主机配置协议 (DHCP) 是一种用于集中对用户 IPv4 地址进行动态管理和配置的技术。为与 IPv6 动态主机配置协议 (DHCPv6) 进行区分&#xff0c;本文统一将动态主机配置协议称为 DHCPv4。 DHCPv4 协议由 RFC 2131 定义&#xff0c;采用客户端/服务器通信模式&#xff…...

Vue.js组件开发-如何处理跨域请求

在Vue.js组件开发中&#xff0c;处理跨域请求&#xff08;CORS&#xff0c;即跨来源资源共享&#xff09;通常不是直接在Vue组件中解决的&#xff0c;而是需要后端服务器进行相应的配置&#xff0c;以允许来自不同源的请求。不过&#xff0c;前端开发者也需要了解一些基本的COR…...

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的&#xff0c;关于类与对象不才在前面笔记中有详细的介绍&#xff1a;点我…...

Agent区别于MOE和RAG的核心; Agent(智能体)、RAG和MOE区别

Agent区别于MOE(专家混合模型)和RAG(检索增强生成)的核心 目录 Agent区别于MOE(专家混合模型)和RAG(检索增强生成)的核心自主性与决策能力环境交互与学习能力多模态感知与处理能力Agent(智能体)、RAG(检索增强生成)和MOE(专家混合模型)区别Agent(智能体)RAG(检…...

【PCL】Segmentation 模块—— 欧几里得聚类提取(Euclidean Cluster Extraction)

1、简介 PCL 的 Euclidean Cluster Extraction&#xff08;欧几里得聚类提取&#xff09; 是一种基于欧几里得距离的点云聚类算法。它的目标是将点云数据分割成多个独立的簇&#xff08;clusters&#xff09;&#xff0c;每个簇代表一个独立的物体或结构。该算法通过计算点与点…...

LuaJIT Garbage Collector Algorithms

Explain 本篇文章是对Make Pall发表wili内容《LuaJIT 3.0 new Garbage Collector》的翻译和扩展&#xff0c;因为原文是对LuaJIT 2.x GC重要功能的简介和对LuaJIT 3.0 new GC的工作计划&#xff0c;所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT 2.x GC做…...

go采集注册表

package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...

软件工程师欧以宁:引领无人机导航与物联网安全的技术革新

在科技日新月异的今天,软件工程师欧以宁凭借卓越的技术能力和前瞻性的创新思维,成为了无人机自主导航和物联网安全领域的佼佼者。作为一名深耕技术前沿的专家,欧以宁不仅推动了无人机导航技术的突破性进展,还为智能家居和物联网的安全架构提供了全新的解决方案。她的研究成果,以…...

从零开始:Gitee 仓库创建与 Git 配置指南

引言 Git 是一款广泛使用的版本控制工具&#xff0c;它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee&#xff08;码云&#xff09;是国内知名的 Git 托管平台&#xff0c;它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...