Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器
最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于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:
- 在自己的应用程序中实现内建的Web服务器(Self-Hosting)
- 将Raspkate寄宿在Windows Service中,向外提供RESTful服务
- 将Raspkate寄宿在Windows Service中,向外提供静态Web页面请求服务
- 将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配置文件:
<?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客户端将代码库克隆到本地:
git clone https://github.com/daxnet/raspkate
然后,在装有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执行:
netsh http add urlacl url="http://+:9023/" user=everyone
演示
这里有几张屏幕截图,展示了Raspkate提供的相关功能。
获取并显示树莓派信息
以下屏幕截取自我的手机浏览器,分别显示了我的树莓派系统信息、树莓派主板信息以及树莓派中所有引脚的名称、类型和电平值列表。
使用HTML5+jQuery控制发光二极管的点亮和熄灭状态
前端是一个寄宿在Raspkate上的一个HTML5+jQuery的单页面应用,后端是运行Raspkate的树莓派。
Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器的更多相关文章
- 基于轻量型Web服务器Raspkate的RESTful API的实现
在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...
- NET的可运行于树莓派
Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制 ...
- C#写的WebServices可运行于树莓派
阅读目录 Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 Raspkate项目 演示 回到目录 Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 最近 ...
- Web服务器Raspkate的RESTful API
基于轻量型Web服务器Raspkate的RESTful API的实现 在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RE ...
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...
- net网站运行在自定义的Web服务器上
ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上 一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Win ...
- 树莓派之web服务器搭建
树莓派之web服务器搭建 (一)使用ufw创建防火墙 设置目的:可以完全阻止对树莓派的访问也可以用来配置通过防火墙对特点程序的访问.使用防火墙更好的保护树莓派. 准备工作 1.带有5V电源的树莓派 2 ...
- Centos7安装Docker 基于Dockerfile 搭建httpd运行环境
Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...
- C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业
准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...
随机推荐
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- SQL Server 数据加密功能解析
SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...
- OpenSceneGraph in ActiveX by ActiveQt
OpenSceneGraph in ActiveX by ActiveQt eryar@163.com Abstract. Qt’s ActiveX and COM support allows Qt ...
- junit4进行单元测试
一.前言 提供服务的时候,为了保证服务的正确性,有时候需要编写测试类验证其正确性和可用性.以前的做法都是自己简单写一个控制层,然后在控制层里调用服务并测试,这样做虽然能够达到测试的目的,但是太不专业了 ...
- [WCF]缺少一行代码引发的血案
这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...
- OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...
- 不懂CSS的后端难道就不是好程序猿?
由于H5在移动端的发展如日中天,现在大部分公司对高级前端需求也是到处挖墙角,前端薪资也随之水涨船高,那公司没有配备专用的前端怎么办呢? 作为老板眼中的“程序猿” 前端都不会是非常无能的表现,那作为后端 ...
- RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...
- bzoj3208--记忆化搜索
题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...
- JVM类加载
JVM的类加载机制就是:JVM把描述类的class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型 ClassLoader JVM中的ClassLoade ...