OpenWrt教程-uhttpd如何支持rpc请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenWrt教程-uhttpd如何支持rpc请求相关的知识,希望对你有一定的参考价值。
参考技术A uhttpd是openwrt系统默认的web服务器,是一个嵌入式轻量级的web服务器,支持https、ubus、cgi、webdav等特性。Ubus为openwrt平台开发中的进程间通信提供了一个通用的框架。它让进程间通信的实现变得非常简单,并且ubus具有很强的可移植性,
openwrt很多服务支持ubus消息服务,netifd是openwrt管理网络的服务,通过netifd可以查询到接口状态、网卡统计数据、无线状态等。
为了减少web配置后端的操作,我们可以通过rpc机制直接获取到netifd以及其他ubus服务的消息,方便web前端开发,减少后端的工作量。
为了支持rpc消息分发,uhttpd需要支持ubus,可以在uhttpd package中选择ubus后编译。
在openwrt根目录make menuconfig,进入uhttpd配置,开启uhttpd-mode-ubus
编译后升级
允许uhttpd,设置-u参数(rpc请求的前缀)
uhttpd -p 80 -u /ubus
本地测试请求脚本
运行结果
错误码, 如果返回了error字段,表示出错
正常返回与几种情况
自己动手添加一个OpenWrt开机启动脚本
在openwrt系统内init进程被procd取代,procd作为父进程可以监控子进程的状态。一旦子进程退出后即可在某一个时刻尝试进行重启进程。在op系统内使用procd监控的有uhttpd,netifd等。在/etc/init.d/文件夹内带有USE_PROCD=1标志,下面就介绍如何让procd启动某一个应用程序 我的应用程序名是binloader, 直接上脚本代码
#!/bin/sh /etc/rc.common # Copyright (C) 2008 OpenWrt.org START=98 #执行的顺序,按照字符串顺序排序并不是数字排序 USE_PROCD=1 #使用procd启动 BINLOADER_BIN="/usr/bin/binloader" start_service() { procd_open_instance #创建一个实例, 在procd看来一个应用程序可以多个实例 #ubus call service list 可以查看实例 procd_set_param respawn #定义respawn参数,告知procd当binloader程序退出后尝试进行重启 procd_set_param command "$BINLOADER_BIN" # binloader执行的命令是"/usr/bin/binloader", 若后面有参数可以直接在后面加上 procd_close_instance #关闭实例 } #start_service 函数必须要重新定义 stop_service() { rm -f /var/run/binloader.pid } #stop_service重新定义,退出服务器后需要做的操作 restart() { stop start }
必须指出来的是,被procd执行的程序不能是daemon后台程序,因为后台程序的主进程退出后在procd看来就是程序退出了,然后会进入respawn流程,之后重复启动和退出。
最后失效了
procd: Instance binloader::instance1 s in a crash loop 6 crashes, 0 seconds since last crash
————————————————
原文链接:https://blog.csdn.net/liangdsing/java/article/details/53906445
以上是关于OpenWrt教程-uhttpd如何支持rpc请求的主要内容,如果未能解决你的问题,请参考以下文章