智能油桶后台架构

ThinkPHP

开发手册

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。
ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织。

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

5.0的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于:

http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/参数/值…

Workerman_TCP

workerman与协议类交互流程

1、假设客户端发送一个数据包给服务端,服务端收到数据(可能是部分数据)后会立刻调用协议的input方法,用来检测这包的长度,input方法返回长度值$length给workerman框架。
2、workerman框架得到这个$length值后判断当前数据缓冲区中是否已经接收到$length长度的数据,如果没有就会继续等待数据,直到缓冲区中的数据长度不小于$length。
4、缓冲区的数据长度足够后,workerman就会从缓冲区截取出$length长度的数据(即分包),并调用协议的decode方法解包,解包后的数据为$data。
3、解包后workerman将数据$data以回调onMessage($connection, $data)的形式传递给业务,业务在onMessage里就可以使用$data变量得到客户端发来的完整并且已经解包的数据了。
4、当onMessage里业务需要通过调用$connection->send($buffer)方法给客户端发送数据时,workerman会自动利用协议的encode方法将$buffer打包后再发给客户端。

使用方法例如下面

use Workerman\Worker;
require_once '/your/path/Workerman/Autoloader.php'
$json_worker = new Worker('JsonNL://0.0.0.0:1234');
$json_worker->onMessage = function($connection, $data) {

// $data就是客户端传来的数据,数据已经经过JsonNL::decode处理过
echo $data;

// $connection->send的数据会自动调用JsonNL::encode方法打包,然后发往客户端
$connection->send(array('code'=>0, 'msg'=>'ok'));

};
Worker::runAll();
...

--


邮箱通知

SendCloud官网:每天有免费邮件发信额度
使用第三方的邮件推送服务,易接入,送达率高,自定义发信域名(域名需备案)

 /**
 * 油箱满后邮件通知用户
 */
private function send_mail() {

    $url = 'http://api.sendcloud.net/apiv2/mail/send';
    $API_USER = SENDCLOUD_USER;
    $API_KEY = SENDCLOUD_KEY;

    $param = array(
        'apiUser' => $API_USER, # 使用api_user和api_key进行验证
        'apiKey' => $API_KEY,
        'from' => '[email protected]', # 发信人,用正确邮件地址替代
        'fromName' => 'PREC_Jo',
        'to' => '[email protected];[email protected];[email protected];[email protected]',# 收件人地址, 用正确邮件地址替代, 多个地址用';'分隔
        'subject' => '油桶溢满警告_测试',
        'html' => '支持富文本',
        'respEmailId' => 'true'
    );


    $data = http_build_query($param);

    $options = array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded',
            'content' => $data
        ));
    $context  = stream_context_create($options);
    $result = file_get_contents($url, FILE_TEXT, $context);

    return $result;
}

MySQL数据库存储

用户名:*****
密码:*****

操作访问:http://IP:PORT/phpmyadmin
项目数据库:smart_oil_drum
现有表:device (详情见表字段,待增加user表)
表的CRUD操作 基于ThinkPHP的API,详见ThinkPHP文档


业务处理模块

你可能感兴趣的:(智能油桶后台架构)