最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流行的前端技术做一个简单的Web站点,让树莓派搭载这个站点,通过手机或者平板电脑来控制树莓派。经过一番调研,考虑如下:

  • 使用Apache或者Nginx搭建一个Web服务器

    • 优点:服务器实现相对成熟

    • 缺点:偏重,而且与树莓派的交互需要涉及Service调用,而实现RESTful服务对于Apache或者Nginx需要额外的组件支持,要付出一定的学习成本

  • 使用Python+Flesk

    • 优点:技术相对成熟,也有很多成功应用案例

    • 缺点:对于我来说需要额外学习Python语言

基于这样的前提,鉴于目前Mono在Linux下的出色表现,想想还是自己使用.NET开发一个轻量型的Web服务器吧,第一期版本让它既支持静态文件的访问服务,也支持RESTful API的调用,在RESTful API中可以暴露访问树莓派GPIO引脚的接口,供HTML5+jQuery的单页面应用调用,于是也就实现了在任意设备上通过浏览器来控制树莓派的目的。

Raspkate项目

Raspkate项目的名字,我想就是两个方面:Rasp,它来源于树莓派的英文名字Raspberry Pi,有表示“小、轻量”的意义,而Kate则取名于英语中的“风筝”,寓意能够充分发挥开发者的想象,对其进行扩展和定制。Raspkate就是这样一款基于.NET Framework、由C#开发的轻量型Web服务器,它的核心部分是一个HttpListener对象,通过多线程模型将HTTP请求异步委托给HttpListener执行。当一个HTTP请求被接受的时候,Raspkate会根据请求的格式或类型,分配特定的模块(Module)对请求进行处理,然后将处理结果返回。如果请求的是一个文件,那么Raspkate会返回文件的内容,如果是一个RESTful请求,则Raspkate会使用已经注册的RESTful API控制器来处理这个请求,并将计算结果以JSON格式返回。

开源地址

Raspkate项目是开源的,代码库地址是:https://github.com/daxnet/raspkate,所使用的许可协议是GPL2.0,(因为其所使用的与树莓派相关的组件是第三方的由GPL2.0授权的开源库),因此,不能在商业环境中使用此项目。

应用场景

您可以在以下场景中使用Raspkate:

  1. 在自己的应用程序中实现内建的Web服务器(Self-Hosting)

  2. 将Raspkate寄宿在Windows Service中,向外提供RESTful服务

  3. 将Raspkate寄宿在Windows Service中,向外提供静态Web页面请求服务

  4. 将Raspkate作为树莓派中的一个独立的小型Web服务器,提供控制树莓派GPIO的Web用户界面

整体架构

下图展示了Raspkate项目的整体架构设计:

可以看到,在Raspkate核心部分就是一个HTTP Listener组件,并且由Module和Configuration支撑Raspkate完成HTTP请求处理。每个模块可以包含多个HTTP Handler,这在定义模块的时候可以对多个HTTP Handler进行注册。

Raspkate配置信息(也就是上图中的Configuration)非常简单,下图就是这个配置信息的类型视图,在RaspkateConfiguration对象上,设定了HttpListener所使用的Prefix,而Modules部分则指定了Raspkate扫描可用模块的路径,IsRelative指定模块路径是否是相对的。

以下是一个标准的Raspkate配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
<? xml  version="1.0" encoding="utf-8" ?>
< configuration >
   < configSections >
     < section  name="raspkateConfiguration" type="Raspkate.Config.RaspkateConfiguration, Raspkate"/>
   </ configSections >
   < raspkateConfiguration  xmlns="urn:Raspkate.Config" prefix="http://127.0.0.1:9023/">
     < modules >
       < add  path="modules"/>
     </ modules >
   </ raspkateConfiguration >
</ configuration >

代码使用

首先,使用Git客户端将代码库克隆到本地:

1
git clone <a href="https://github.com/daxnet/raspkate">https://github.com/daxnet/raspkate</a>

然后,在装有MSBuild的Windows机器上,执行build.bat命令:

  • build.bat All - 这将编译所有模块,并将模块的二进制文件复制到modules目录下

  • build.bat Minimal - 这仅编译核心模块(不包含类似树莓派支持等扩展模块)

如果是在装有Mono的Linux机器上,则相应地执行build.sh即可。

在编译完成之后,进入bin目录,执行RaspkateService.exe即可(注意:如果是在树莓派中执行,并且希望加载树莓派支持模块,则需要通过 sudo ./RaspkateService.exe 命令执行,以获得root权限)。在成功启动后,你应该看到类似下面的画面:

这时,打开浏览器,在浏览器中输入http://127.0.0.1:9023,您应该可以看到类似以下的画面:

这表示您已经成功运行Raspkate服务,此页面显示了运行服务器相关的信息。注意:如果你希望你的Raspkate服务能够在同网络的其它机器访问,请在执行RaspkateService.exe之前,将RaspkateService.exe.config文件中的Prefix设置修改为:http://+:9023/。但这样做可能会牵涉到用户访问控制的问题,如果将Prefix改为该值后,出现Raspkate无法启动的问题,请先在Command Line执行:

1
netsh http add urlacl url="http://+:9023/" user=everyone

演示

这里有几张屏幕截图,展示了Raspkate提供的相关功能。

获取并显示树莓派信息

以下屏幕截取自我的手机浏览器,分别显示了我的树莓派系统信息、树莓派主板信息以及树莓派中所有引脚的名称、类型和电平值列表。

        

使用HTML5+jQuery控制发光二极管的点亮和熄灭状态

前端是一个寄宿在Raspkate上的一个HTML5+jQuery的单页面应用,后端是运行Raspkate的树莓派。

    

陈晴阳(Sunny Chen),2003年毕业于中南大学铁道校区。高级程序员,系统分析员,微软MVP(Visual C#)。cnblogs网名daxnet,并打算以该名闯荡IT江湖。MicrosoftDynamics AX、Microsoft .NET/C#以及领域驱动设计(DDD)的狂热爱好者。

原文地址:http://www.cnblogs.com/daxnet/p/5306587.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

赞赏

人赞赏

Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器相关推荐

  1. 基于轻量型Web服务器Raspkate的RESTful API的实现

    在上一篇文章<Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器>中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkat ...

  2. 推荐两款支持在linux下运行ASP.NET网站的国产免费WEB服务器软件

    推荐两款支持在linux下运行ASP.NET网站的国产免费WEB服务器软件 1.kangle kangle web server是一款跨平台(windows/linux/bsd).功能强大.安全稳定. ...

  3. 基于resnet-18的轻量型车道检测研究

    基于resnet-18的轻量型车道检测研究 1.论文介绍以及实验 2.参考内容 论文2: Ultra Fast Structure-aware Deep Lane Detection 官方代码地址:h ...

  4. 改进Mahmood 等提出的基于椭圆曲线的轻量型的的认证协议

    改进Mahmood 等提出的基于椭圆曲线的轻量型的的认证协议 1.初始阶段 1.旧版 1.改进(无) 2. 注册阶段 1.旧版 2.改进 3. 用户间认证与建立临时会话密钥阶段 1.旧版 2.改进 4 ...

  5. 树莓派 Raspberry Pi 3B+ 无线路由器, WEB 服务器(Nginx,PHP,Sqlite3),UART 串口数据采集

    目标: 测试四核 A53 树莓派 Raspberry Pi 3B+ 无线路由器, 轻量级WEB 服务器(Nginx,PHP,Sqlite3),UART 串口数据采集性能 初始配置,部分选项需要sudo ...

  6. 利用树莓派和花生壳搭建web服务器

    文章目录 前言 一.Apache web服务器搭建 1.安装并打开服务 2.测试 3.改变默认页面 二.内网穿透 1.花生壳安装 2.内网穿透 前言 一个简单例子,使用树莓派搭建apache web服 ...

  7. 基于Docker里的运行的tomcat容器进行部署Java Web项目详解

    引言:在centos-7环境装了docker后,通过docker创建一个tomcat容器,想部署Java web项目,结果就是找不到tomcat 容器的的webapps目录,导致部署不了项目,不过后来 ...

  8. C#写的WebServices可运行于树莓派

    阅读目录 Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 Raspkate项目 演示 回到目录 Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 最近在业 ...

  9. 利用SSL协议配置web服务器,基于windows2008平台配置实现利用SSL协议的安全IISWeb服务器汇总.doc...

    PAGE \* MERGEFORMAT - 24 - PAGE \* MERGEFORMAT - 1 - 石河子大学信息科学与技术学院 课程设计报告2014-2015学年第一学期 题目名称:基于win ...

最新文章

  1. [Android Pro] svn实例
  2. java根据日期生成表主键_java 利用时间生成主键
  3. PHP手机号中间四位用星号*代替显示
  4. iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
  5. oracledatabase11gr2怎么打开_win10 安装oracle 11gR2_database(内附下载地址)
  6. linux6.5下配置nfs,CentOS 6.5 NFS配置详细教程
  7. git -- 练习的笔记
  8. vs自带iis局域网调试
  9. GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记
  10. 程序员面试题之从字节截断谈起
  11. Gradle之使用Gradle的命令行
  12. python 全部缩进一行_每天三分钟一起学python之(三)python的基本语法
  13. 36. BOM (2)
  14. 网上邻居的计算机用户名与密码是什么,访问网上邻居需要用户名和密码解决办法...
  15. ElementUI插件引用
  16. 互联网面试六大常见问题及应对技巧,2021不再入坑!
  17. 电脑桌面图标右上角出现计算机名称如何取消,电脑桌面上的图标名称怎么清除不显示?...
  18. vue3+vite中显示img图片,显示不出来问题。
  19. Extjs中利用combobox实现全国省市级联
  20. rocket使用实例

热门文章

  1. 用java写了一个汉诺塔
  2. 深入分析Volatile的实现原理
  3. 非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
  4. 【Silverlight5矢量打印】如何用C#代码检测打印机和驱动是否支持PostScript
  5. VMware 虚拟机(linux)增加根目录磁盘空间
  6. Q+开放的互联网:腾讯QQ “亮剑” 开放平台
  7. 程序内存一直在泄漏,原来是异步死循环了 !
  8. 如何查看 .NET Core 3.1 源代码
  9. 使用CLI模板 | Visual Studio 2019(16.10)新功能试用
  10. 网关Ocelot功能演示完结,久等了~~~