物联网系统的搭建(七)

  Raspberry Pi

图像说明文字

1 Geek的盛宴

Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Raspberry Pi相比于一般的ARM开发板来说,由于其本身搭载着Linux操作系统,可以用诸如Python、Ruby或Bash来执行脚本,而不是通过编译程序来运行,具有更高的开发效率。

2 Raspberry Pi 初始化

今天的Raspbian默认已经安装openssh-server,并默认开启了OpenSSH-Server。

接着我们就可以看到系统启动了,要我们输入用户名和密码

Raspbian GNU/Linux 7 raspberrypi ttyAMA0

raspberrypi login: pi
Password:
Last login: Sat Apr 26 05:58:07 UTC 2014 on ttyAMA0
Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ls

NOTICE: the software on this Raspberry Pi has not been fully configured. Please run 'sudo raspi-config'

然后

sudo raspi-config

选择第一个,下面就可以继续了

Expand Filesystem              Ensures that all of the SD card s

接着重启后,便可以扩展SD卡成功。

注: Raspbian与一般的Debian系统使用起来区别不是太大(ps:命令上),由于CPU是不同的架构,在编译上可能有所区别。通常PC上的软件需要重新编译才能在RPi上运行,所以如果可以用apt-get安装的话,就不要自己编译了。

3 Raspberry Pi GPIO

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

图像说明文字

 Server

1 服务器

服务器(Server)指:

  • 一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应用程序服务器。
  • 运行以上软件的计算机,或称为网络主机(Host)。
  • 一般来说,服务器通过网络对外提供服务。可以通过Intranet对内网提供服务,也可以通过Internet对外提供服务。

2 Web服务器

WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

3 LNMP

图像说明文字

Linux+Nginx+MySQL+PHP

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。

Web服务

Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。

尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。

WEB服务实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:

  • 远程过程调用(RPC)
  • 面向服务架构(SOA)
  • 表述性状态转移(REST)。

SOAP VS RESTful

简单对象访问协议是交换数据的一种协议规范,使用在计算机网络Web服务中,交换带结构信息。SOAP为了简化网页服务器从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。

 HTTP与RESTful

1  你所没有深入的HTTP

Internet有两个核心协议: IP和TCP,这样讲述起来似乎会很漫长。

基本概念

超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

  • HTTP是用于客户端与服务端之间的通信。
  • 传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的。

注意: HTTP协议只规定了客户端与服务端的通信规则,而没有规定其通讯协议,只是现在的大部分实现都是将TCP作为通讯协议。

1.1 打开网页时发生了什么

简单地来说,当我们在浏览器上输入URL的敲下回车的时候。

  • 浏览器需要查找域名^domain的IP,从不同的缓存直至DNS服务器。
  • 浏览器会给web服务器发送一个HTTP请求
  • 服务器“处理”请求
  • 服务器发回一个HTML响应
  • 浏览器渲染HTML到页面。

StackOverflow上有一个这样的回答会比较详细。

  • browser checks cache; if requested object is in cache and is fresh, skip to #9
  • browser asks OS for server's IP address
  • OS makes a DNS lookup and replies the IP address to the browser
  • browser opens a TCP connection to server (this step is much more complex with HTTPS)
  • browser sends the HTTP request through TCP connection
  • browser receives HTTP response and may close the TCP connection, or reuse it for another request
  • browser checks if the response is a redirect (3xx result status codes), authorization request (401), error (4xx and 5xx), etc.; these are handled differently from normal responses (2xx)
  • if cacheable, response is stored in cache
  • browser decodes response (e.g. if it's gzipped)
  • browser determines what to do with response (e.g. is it a HTML page, is it an image, is it a sound clip?)
  • browser renders response, or offers a download dialog for unrecognized types

忽略一些细节便剩下了

  1. 从浏览器输入URL
  2. 浏览器找到服务器,服务器返回HTML文档
  3. 从对应的服务器下载资源

说说第一步,开始时我们输入的是URI(统一资源标识符,Uniform Resource Identifier),它还有另外一个名字叫统一资源定位器(URL[^URL],Uniform Resource Locator)。

1.2 URL组成

网址算是URL的一个俗称,让我们来看看一个URL的组成,以HTTP版IOT中的URL为例。

http://b.phodal.com/athome/1

开始之前,我们需要标出URL的80端口以及json文件的全称,那么上面的网址就会变成

http://b.phodal.com:80/athome/1.json

那么对于这个URL的就有下面几部分组成

  • http:// http说的是这个URL用的是HTTP协议,至于//是一个分隔符,用法和C语言中的;一样。这样的协议还可以是coap,https,ftp等等。
  • b 是子域名,一个域名在允许的情况下可以有不限数量的子域名。
  • phodal.com 代表了一个URL是phodal.com下面的域名
  • 80 80是指80端口,默认的都是80,对于一个不是80端口的URL应该是这样的http://iot-coap.phodal.com:8896/
  • athome 指的是虚拟目录部分,或者文件路径
  • 1.json看上去就是一个文件名,然而也代表着这是一个资源。

对就一个稍微复杂点的例子就是

http://designiot.phodal.com/#你所没有深入的http

这里的#后面是锚部分,如果你打开这个URL就会发现会直接跳转到相应的锚部分,对就于下面这样的一个例子来说

http://www.phodal.com/search/?q=iot&type=blog

?后面的q=iot&type=blog的部分是参数部分,通常用于查询或者、搜索。

2 一次HTTP GET请求

当我们打开最小物联网系统的一个页面时,如http://b.phodal.com/athome/1.json

我们在浏览器上看到的结果是

[
  {
    "id": 1,
    "temperature": 19,
    "sensors1": 31,
    "sensors2": 7.5,
    "led1": 0
  }
]

只是我们看到的是结果,忽略了这其中的过程,于是我们用curl^curl命令来看看详细的情况。

curl -I -s http://b.phodal.com/athome/1.json

出于某种原因考虑,删去了其中一些元素,剩下下面这些。

HTTP/1.1 200 OK
Content-Type: application/json
Date: Fri, 05 Sep 2014 15:05:49 GMT

[{"id":1,"temperature":19,"sensors1":31,"sensors2":7.5,"led1":0}]

我们用curl命令向服务器发起了GET请求,服务器返回了上面的结果。

2.1 HTTP响应

一个HTTP响应由三部分组成

  • 状态行(状态码)
  • 消息报头(响应报头)
  • 响应正文(消息体)
2.1.1 HTTP响应 状态码

在上面的结果中,状态行是

HTTP/1.1 200 OK

返回的状态码是200,OK是状态码的原因短语。

如果是一个跳转的页面,它就可能是下面的结果:

HTTP/1.0 301 MOVED PERMANENTLY
Date: Mon, 08 Sep 2014 12:04:01 GMT
Content-Type: text/html; charset=utf-8

HTTP Status有五种状态,而这五种状态又有所细分,提一下这五种状态,详细可参见http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

  • 1xx消息
  • 2xx成功
  • 3xx重定向
  • 4xx客户端错误
  • 5xx服务器错误

  • 200 ok - 成功返回状态,对应,GET,PUT,PATCH,DELETE.
  • 201 created - 成功创建。
  • 304 not modified - HTTP缓存有效。
  • 400 bad request - 请求格式错误。
  • 401 unauthorized - 未授权。
  • 403 forbidden - 鉴权成功,但是该用户没有权限。
  • 404 not found - 请求的资源不存在
  • 405 method not allowed - 该http方法不被允许。
  • 410 gone - 这个url对应的资源现在不可用。
  • 415 unsupported media type - 请求类型错误。
  • 422 unprocessable entity - 校验错误时用。
  • 429 too many request - 请求过多。
2.1.2 HTTP响应 响应报头

在这次响应中,返回了两个报头,即

Content-Type: application/json
Date: Fri, 05 Sep 2014 15:05:49 GMT

Content-Type和Date,在这里的Context-Type是application/json,而通常情况下我们打开一个网站时,他的Content-Type应该是text/html。

Content-Type: text/html;

Content-Type是最重要的报头。

2.1.3 HTTP响应 响应正文

正文才是我们真正想要的内容,上面的都是写给浏览器看的,一般的人不会去关注这些。

HTTP/1.1 200 OK
Server: phodal.com/0.17.5
Content-Type: application/json

[{"id":1,"temperature":19,"sensors1":31,"sensors2":7.5,"led1":0}]

通常这是以某种格式写的,在这里是以JSON写的,而对于一个网站的时候则是HTML,如:

<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>

那么这次GET请求返回的就是:

HTTP/1.0 200 OK
Date: Mon, 08 Sep 2014 12:04:01 GMT
Content-Type: text/html; charset=utf-8    

<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    [{"id":1,"temperature":19,"sensors1":31,"sensors2":7.5,"led1":0}]        
</body>
</html>

虽然与第一次请求的结果在游览器上看似乎是一样的(ps:可能有微小的差异),然而其本质是不同的。

推荐及参考书目:

  • 《Web性能权威指南》
  • 《图解HTTP》
  • 《RESTful Web Services Cookbook》
  • 《RESTful Web APIs》

[^URL]: URL 是 URI 的子集


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值