嵌入式linux之go语言开发(十一)让web服务器跑在终端上,通过网页配置终端参数

简介: 嵌入式linux之go语言开发(十一)让web服务器跑在终端上,通过网页配置终端参数

以数据网关或集中器设备为例,有人知道吧。这玩意儿没界面,但是还一大堆参数需要配置。


那怎么搞?做个上位机工具,做界面,再做个串口协议一个个的搞吗?


太繁琐了,不但得制定协议,还得造工具配合调试,发布时还得配套给用户提供工具安装和使用。这么麻烦的安装配置和使用,如何让用户好用,易用,爱用?


如果有一web界面,可以通过网页访问它,通过电脑在web网页中对终端参数进行配置岂不是很爽?


只要能访问到集中器设备的IP地址即可,如下这张图的web后台是跑在嵌入式linux上的。



那么要在嵌入式linux上用c语言实现一web服务器?在编辑几个网页供客户端浏览器访问?


好吧,谁能用c语言在短时间内高效并稳定的实现,够牛叉,是大牛了。


用c想做肯定也能实现,但是比的是谁比谁更快,谁比谁更强,谁比谁更稳,谁比谁更优。


用c可能怎么做?移植个嵌入式的web服务器,如Boa,Shttpd,Lighttpd,Thttpd,GoAhead等,然后呢用c写CGI程序。代码拼接html。


c什么轮子都得造,且短时间内不定造好,go的话你什么轮子都可以复用。


比如这个复用了go生态里支持百万级并发量的高性能gin web框架。


即便用c慢腾腾的做出来,在市场上会早已失去了先机。


在这个竞争激烈的市场上,拼的是人无我有,人有我优,人优我新,人新我更新,且做到低成本和高效率。


不应该只是盲从或跟随潮流,而应该有一种No1心态。


这种心态不是说要妄自菲薄,看不清敌人和自己。而是要树立自信,树立标杆,改变潮流,引领潮流。


想实现web浏览器访问并通过网页设置参数怎么搞?方法还是有的,且很简单。


使用 go语言来搞的话,让你爽到天,几分钟搞定一个web服务器和界面。


以下为在周立功EPC-6G2C-L的ARM板子上的测试:


让大名鼎鼎的gin ,go的一个很流行web框架,直接跑在上面,很流畅,很赞。


生成的可执行文件有13M。


有人说,这么大的体积啊,用在嵌入式linux上不合适吧。


但这可能是唯一的缺点,但是若你的板子是单片机,且资源很受限,还是不要玩go了。


我这嵌入式linux板子的资源256M内存,256M Flash,这么多资源,就运行一功能性的程序,还嫌程序包体积大吗?


板子资源如下:


U-Boot 2015.04-14492-g8762dca (Jul 19 2016 - 09:37:30)
CPU:   Freescale i.MX6UL rev1.1 at 396 MHz
CPU:   Temperature 46 C
Reset cause: WDOG
Board: EPC-M6G2C
I2C:   ready
DRAM:  256 MiB
NAND:  256 MiB
MMC:   FSL_SDHC: 0
Linux version 4.1.15-224247-gb0fdb78 (shenguiting@linux-compiler) (gcc version 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09) ) #1 SMP PREEMPT Mon Jul 18 15:16:44 CST 2016
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache




代码仅仅几行而已。


package main
import "net/http"
import "github.com/gin-gonic/gin"
func main() {
  r := gin.Default()
  r.Static("/assets", "./assets")
  r.StaticFS("/static", http.Dir("assets"))
  r.LoadHTMLGlob("template/*")
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong,respond from EPC-ZLG Board",
        })
  })
  r.GET("/test", func(c *gin.Context) {
        c.HTML(http.StatusOK, "test.html", gin.H{
            "title": "this is a test",
        })
    })
    r.Run(":8000") // listen and serve on 0.0.0.0:8080
}


如果觉得这个界面简单单调,那么来一张这个图看看,是不是很像一web管理后台?


没错,这是跑在嵌入式设备上的,对设备进行参数设置的功能管理界面。


(注:目前这只是针对自己的周立功linux开发板业余时间的go语言实践。若要做成一个产品,是可以达到目的的,只是得花点儿时间)



在虚拟机上编译步骤,还可以直接在电脑上运行仿真。简直太赞了。


go run main.go直接在电脑上跑起来。


若在板子上跑,直接 GOOS=linux GOARCH=arm GOARM=7 go build main.go


把生成的的二进制文件main拷贝到机器上即可。别忘加可执行权限。


chmod +x main



网页界面,若不要求很花哨,就更简单了。


<html>
<head>
<h1>
{{ .title }}
</h1>
</head>
<body>
<p>EPC-ZLG Board test</p>
<form name="form1" action="/ping" method="post">
设备地址<input type ="test" name="user" size="18"> <br />
设置密码<input type ="password" name="psw" size="20"> <br />
 <input type ="submit" value="设置"> 
</form>
</body>
</html>


最后,如果有新的项目,且系统是嵌入式linux,我主张用go来开发。


姑且不说用c做得多久,用go做的话,两到三周时间差不多了吧。

相关文章
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
407 4
|
6月前
|
存储 弹性计算 网络协议
阿里云服务器ECS实例规格族是什么?不同规格CPU型号、处理器主频及网络性能参数均不同
阿里云ECS实例规格族是指具有不同性能特点和适用场景的实例类型集合。不同规格族如计算型c9i、通用算力型u1、经济型e等,在CPU型号、主频、网络性能、云盘IOPS等方面存在差异。即使CPU和内存配置相同,性能参数和价格也各不相同,适用于不同业务需求。
497 144
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
8月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
312 104
|
6月前
|
存储 弹性计算 网络协议
阿里云服务器ECS实例规格族详细介绍:计算型c9i、经济型e和通用算力u1实例CPU参数说明
阿里云ECS实例规格族包括计算型c9i、经济型e和通用算力型u1等,各自针对不同场景优化。不同规格族在CPU型号、主频、网络性能、云盘IOPS等方面存在差异,即使CPU内存相同,性能和价格也不同。
797 0
|
7月前
|
存储 Linux Apache
在CentOS上配置SVN至Web目录的自动同步
通过上述配置,每次当SVN仓库中提交新的更改时,`post-commit`钩子将被触发,SVN仓库的内容会自动同步到指定的Web目录,从而实现代码的连续部署。
217 16
|
4月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
377 10
|
4月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。