完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【广东龙芯2K500先锋板试用体验】3.开发http服务与通过websocket实时更新页面数据 大信(QQ:8125036) 电子发烧友网联合广东龙芯发起龙芯2K500开发板试用活动。龙芯2K500先锋板采用龙芯2K0500芯片。龙芯2K500片内集成64位LA264处理器核、32位DDR3控制器、2D GPU、DVO显示接口、两路PCIe2.0、两路SATA2.0、四路USB2.0、一路USB3.0、两路GMAC、PCI总线、彩色黑白打印接口、HDA及其他常用接口。 一、HTTP服务程序开发 该开发板具备高性能、超低功的特点,能够长时间的不间断工作,因此很适合作为工业数据通讯的服务模块,因此计划移植一个HTTP web服务程序到该板上,上位机能够通过板上的以太网络访问该web服务,该web服务返回开发板的一些基本信息数据,同时通过web页面可以控制板上的IO,达到向下发送控制指令和控制参数等功能。 HTTP服务网上开源的代码很多,在选择时,主要考量的因素是:1要对系统的消耗小,如对CPU,内存,存储等,不能因为HTTP服务占用了硬件过多的资源,以至于留给业务的资源不够。2需要支持HTTP标准的协议,很多http代码实现不完整,造成只能演示个通讯,无法达到工程应用的目标。3 http服务必须是支持高效的epoll的事件触发机制的异步模式,必须要尽可能实时的响应请求和高效的完成通讯。4.需要能够支持websocket这样的连接协议,满足对浏览器客户端的双向实时通讯。5.工程代码结构清晰,便于维护和改造,方便集成其它硬件操作模块。 同时,因为在嵌入式内的http服务,一般多用于设备维护,控制管理,都是管理与应用人员使用浏览器通过http服务来查看设备状态和控制设备,所以对http服务并发要求不大,一般并发在100已足够用。 同样在嵌入式HTTP服务中,需要跟硬件交互,因此需要http服务与硬件具有开放的操作性。也就是http也是硬件的一个应用。同时为了使web应用有良好的用户界面,一般采取动态响应式页面的前端,使用webapp的接口方式对页面提供数据的接口调用,数据接口一般采用ajax 和 websocket方式。而页面结构一般相对简单,因此无需复杂的动态后端脚本语言,无需php之类的这样的服务端中间件,而是直接采用 CGI,FastCGI的方式完成动态页面的生成。 经过调查一番,现有适合嵌入式使用的有nginx, lightHTTP, Httpd,uHttp等。这里经过对比,此次使用 uHttp/Websocket开源嵌入式项目。 工程的开源地址: https://github.com/uNetworking/uWebSockets 1.下载uWebSockets 源码工程 下载后,进入根目录,查看发现有makefile, 可以尝试直接编译 2.切换交叉编译环境 3.进行尝试编译 make build 编译时出现报错,查看提示,发现缺少uSocket库,回头去看了下readme,发现是这个工程依赖uSocket库,于是再去下载uSocket库,不过很简单,这个库在uWebsocket同一个库下。 试编译,提示出错,缺少另外一个依赖的工程。 4.下载uSocket库 地址:https://github.com/uNetworking/uSockets.git 下载完成后,查看uWebsocket的编译脚本,发下uScket需要放在uWebsocke的目录下,即可直接联编,而不需要分别编译,这样就非常简便。 放置好目录后,再进行编译 输出到最后的应用时,出现报错。 5.检查uWebsocket应用编译报错的原因 经过分步的编译和跟踪编译过程,手动的单步编译能够成功编译出目标文件。对比手动编译和脚本自动编译的脚本执行的差异时,发现uSocket库的库文件已经生成,uWebsocket的文件编译已经完成,而在链接步骤出现异常。说明是自动编译的连接出现问题 链接工具错误,或者没有设置这样的静态库链接工具。 6.修改makefile 脚本 经过分析,发现在库的生成时,其格式有问题,于是修改makefile,执行生成库的编译工具,于是在 uWebsocket工程的Makefile文件里加入指定库生成工具 AR=ARM-poky-linux-gnueabi-gcc-ar 7.重新编译 修改makefile 后,即可重新编译,则可以顺利的编译出目标文件了。 编译examples例子程序,提示缺少zlib库: 那么就先下载zlib源码,地址: 下载后编译: 8.编译example 进一步可以把uWebsocket带的例子全部编译出来,均可以顺利编译成功。上传开发板运行正常。 9.修改Httpserver例子程序 因为我们需要的是一个http服务,在uWebsocket里刚好有这个程序,就直接在它基础上进行修改了。 主要修改为,加入对文件的预读取,完成静态html,js, css,image等资源的加载和快速输出的功能。另外增加了一个简单的模板功能,即在对静态html文件读取之后,在对里面特定的标签内容进行内容替换。 10. 添加websocket服务 因为在页面上需要实时的跟后台取数据,而高效又延时短的通讯方式属于websocket了。 这里只需要把uWebsocekt工程里的websocet模块合并到httpserver服务里即可。即达到了既能输出html页面又能提供websocket数据通讯。 当使用 http://192.168.50.150/ 时就是访问http服务,而ws://192.168.50.150/ 时就是访问websocket服务。 这样就完成一个紧凑型的,具备动态页面输出和实时通讯协议的http嵌入式服务了。 对于系统内存实时使用数据,则通过前端页面建立websocket连接,websocket服务端实时推动信息,然后前端页面解析并渲染呈现出来。 六、板上运行测试 在编译好http服务和设计好页面资源后,即可以在板上进行部署,因为这个http服务非常简单,没有什么配置文件,其服务端口设置为80,在/home/root下创建www目录作为静态资源发布目录即可。 然后再httpserver传输到/home/root,把静态html等资源传输到www目录下,就可以通过在网络上,打开浏览器访问开发板的IP,即可看页面内容。 七、WEB控制硬件方法总结 通过使用uWebsocket建立嵌入式HTTP服务,可以轻松的完成嵌入式的web管理页面,并且可以完成信息展示,控制的过程。并且数据在浏览器和开发板间传输,是实时传输,页面端使用websocket完成双向的数据通讯,使的前端能够非常平滑的显示硬件的相关参数信息。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 粤ICP备14022951号 )
GMT+8, 2023-4-26 08:52 , Processed in 1.187231 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:粤 B2-20160233 工商网监 粤ICP备 14022951 号