magic 发布的文章

Serverless实战驾校小程序【考题练习】二
介绍
准备工作做完后,今天我们从核心模块,分类与题目练习开始做。由于开发时间比较紧,这里主要写实习思路,与核心代码。

页面一、首页
这里我们主要优先实现功能逻辑,UI后面调整,我们用iview 拖一个大致结构的页面。

这里用了以下组件

{
  "usingComponents": {
    "i-tab-bar": "../../dist/tab-bar/index",
    "i-tab-bar-item": "../../dist/tab-bar-item/index",
    "i-grid": "../../dist/grid/index",
    "i-grid-item": "../../dist/grid-item/index",
    "i-grid-icon": "../../dist/grid-icon/index",
    "i-grid-label": "../../dist/grid-label/index",
    "i-tabs": "../../dist/tabs/index",
    "i-tab": "../../dist/tab/index"
  }
}

页面二、专项练习页面
这个页面,我们从数据库里取出数据,首先建立好数据表,这个表结构昨天有讲。

我们导入一个CSV格式数据到表里

CSV文件内容

bSubjects,title
1,时间题
1,速度题
1,距离题
1,罚款题
1,记分题
1,标志题
1,标线题
1,手势题
1,信号灯
1,灯光题
1,仪表题
1,装置题
1,路况题
1,酒驾题
1,动画题
1,情景题

然后我们取出这里的数据,在小程序里面显示

核心代码

// 库文件
const getQuestionTypeList=()=>{
    return new Promise((resolve, reject) => {
      const query = wx.Bmob.Query('questionType');
      query.find().then(res => {
          console.log(res)
          resolve(res)
      }).catch(err=>{
        console.error(err)
        reject(err)
      })
    });
}

// 页面js文件
wechatApp-questions2/pages/topic/index.js
onLoad(e){
    wx.u.getQuestionTypeList().then(r=>{
      console.log(r,`k`)
      this.setData({
        result:r
      })
    })
  },

  // wxml文件
  <i-panel title="题型列表" hide-top>
    <!-- <view style="padding: 15px;">头部距离为 0 的 Panel</view> -->
    <i-row>
        <i-col wx:for="{{result}}" span="12" i-class="col-class">
            <i-panel bindtap="handleTabClick" data-id="{{item.objectId}}" class="cell-panel-demo" title="">
                <i-cell title="{{item.title}}" value=""> 
                    <i-icon type="enterinto" slot="icon" />
                </i-cell>
            </i-panel>
        </i-col>
    </i-row>
</i-panel>

首页点击到分类,分类点击到题目页面,下一个是题目页面,这个页面是整个项目的核心, 所以的题目都在这个页面进行计算,判断。

页面三、答题页面
这个页面会是最复杂的一个页面, 涉及到,计时,判断、记录历史等等操作。

之前只想到模拟考试,没考虑到这种按照顺序练习, 第二次进入,可以继续之前的题目练习。 这里建个学习表,记录他的顺序练习相关数据,以下是数据表暂定的结构

学习表 learning

| 名称 | 类型 | 描述 | | --------- | ------ | --------------------------------------------------- | | bSubjects | sting | 所属科目 1.科目一 2.科目四 | | bModels | sting | 所属车型 1.小车 2.货车 3.客车 4.摩托车 | | where | string | 查询的条件 {"where":{"name":1},"order":"name"} | | num | string | 学习到第多少道题 | | result | array | 结果 [{" id ":" XXX ', '0'}, {" id ":" XXX ", "1"}] | | type | int | 0,免费版题目 1,付费版题目 | | uid | string | 用户id |

第一步:还是一样,用iview 复制出对应组件

第二步:查询出此类别的题目, 并且默认显示一道题,点击下一题,显示数组下一个元素

第三步:先做单选题,点击选择,判断是否正确, 如果正确,记录到结果对象 [{" id ":" XXX ', '0'}, {" id ":" XXX ", "1"}] ,0代表回答错误,1正确

第四步:点击下一题计算进度条位置,判断当前是否选择了题目,否则提示请选择结果。

目前做到这个一步,明天继续。

大家想学习更多的云服务开发, 可以加入Bmob的交流群:群号:273080081

小程序开发免费后端之神秘利器分享

大家都知道,想快速开发一款完整小程序都缺不了前端与后端。前端想提高开发速度,大家都会使用市面上优秀的UI框架来提高开发效率。

后端,很多刚入门的前端人员还不知道自己完全不懂后端,也可以开发出功能强大带后端功能的小程序。 后端这个行业,因为概念太多,必须运行在服务器上面,需要有服务器,有一定成本。让很多前端技术人员望而却步。

目前小程序需要一个可以用的后端解决方案,需要后端语言+服务器+数据库+备案域名+https证书。整个链条下来,没有一个月以上都搞不定。 所以腾讯云最初2017年初推出了Wafer 方案,让后端简单了很多。节约后端整套搭建的时间,实现一个套件提供给你,减少后端工作量。

到了2018年中旬,官方终于发现,即使提供Wafer方案, 低价3块钱购买,要开发一个带后端的小程序还是很麻烦,主要是技术门槛,很多人根本就不懂服务器,wafer搭建报错了就玩不转。 所以推出了小程序云模式,基于Serverless架构。

作为前端无需搭建,无需了解服务器概念,什么cpu、内存、带宽都不需要你去管,你只要写好客户端代码就行。前端人员客户端直接操作数据库, 就像操作本地缓存一样简单。

学习教程

  1. 首先跟Jquery一样,引入js库
var Bmob = require('../dist/Bmob-x.x.x.min.js');
  1. 初始化,让后台知道你是使用哪个库。
Bmob.initialize("你的Application ID", "你的REST API Key");

3 . 业务操作: 例如查询tableName表里一个姓名(name)叫张三的人,这样就好。

const query = Bmob.Query("tableName");
query.equalTo("name","==", "张三");
query.find().then(res => {
    console.log(res)
});

无论是小程序、Cocos Creator、快应用、网页、nodejs等都是这样写,在控制台就可以看到打印符合姓名(name)叫张三的所有人。从数据库取出数据如此简单

如果你想新增一位叫李四的人到数据库,当然也很简单

const query = Bmob.Query('tableName');
query.set("name","李四")
query.save().then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

没看错,通过js代码,就可以跟操作缓存一样操作数据库,小程序开发带后端的,再也不用去学PHP了。 网页操作数据库也一样

这里放个完整的网页代码,从数据库读取数据显示到页面。

<html>
<head>
    <title>Bmob后端云测试</title>
    <script src="Bmob-1.4.2.min.js"></script>
    <script>
    Bmob.initialize('9b41c92db4976a1bae59d554f0c3fc4a', '7fa2bb3451025d9da1f234e700ea161a')
    const query = Bmob.Query("newslist");
    query.find().then(res => {
        console.log(res)
        for (var i = 0; i < res.length; i++) {
           document.write(`${i}:${res[i].title}-----${res[i].createdAt}<br>`)
        };
    });
    </script>
</head>
<body>

</body>
</html>

https://www.jianshu.com/p/4f9fdf956bb8

更多操作,可以去官方看文档。

学习觉得只有文档,没有实际项目源码? 这是很快新框架的一个弊端,Bmob云服务是国内最早一家做后端云产品, 目前网络上大量基于Bmob云的实际项目。官方为了大家更快学习使用,也推出了一个源码市场,你可以把自己写的代码提交上去,开源与不开源都可以。

开源提供免费的发布上去,相比自己放github更方便, 原因是其他人点击购买(无需付费),可以立刻生成这个小程序的所有数据结构,包含默认演示数据。 下载代码开发工具打开即可学习。

这里推荐几个开源,带后端的小程序源码

1.地道美食地图

源码地址: https://github.com/LanceCong/gourmet_map

由于简书新规则,禁止放小程序二维码。

2.出发吧一起

源码地址:https://github.com/dmego/together

由于简书新规则,禁止放小程序二维码。

常规的小程序大家都知道,可以做,如果复杂的是否可以开发,下面推荐

推荐3个复杂的例子

  1. 趣猫

由于简书新规则,禁止放小程序二维码。

这个基于Serverless开发的一个例子,是基于Bmob后端云小程序,开发的一个小程序,叫趣猫。他的业务是一个淘宝客的业务,搜索跟推荐分成,提现是他主要的功能, 其中搜索,如果不配合Faas,是没法实现, 因为他的搜索,其实是搜索淘宝客API的数据,整个淘宝推广的商品都可以搜索出来,有token授权,需要Faas访问淘宝API,返回数据给小程序客户端。

2.纸塘

由于简书新规则,禁止放小程序二维码。

第二个基于Serverless开发的一个例子,小程序纸塘壁纸最近增加了一个功能,壁纸更新提醒通知,当后台有壁纸更新了, 会自动发送一条模板消息给我。这个也是基于Bmob 云函数(Faas)。目前这个小程序,已经从小程序演生,上线android、IOS,快应用。4个客户端,共同打通用户体系。

这么复杂的逻辑都可以实现,一般没有什么业务是做不了的。这种一个前端就可以做出带后端的小程序,是未来的发展方向,目前为什么推荐Bmob小程序云,而不是官方的小程序云。

1.Bmob 是最早一家,做这行在国内很多年了。

2.Bmob的例子,跟成型项目更多

3.Bmob 存储。流量更多,支持多端上传访问,每个月送20G,CDN流量持续这么多年,没变过。

4.Bmob技术服务会更好,官方有专业的技术群,开发过程中问题能得到及时解答。

5.Bmob 支持大并发。

第五点,也是最重要的,试想下如果你有个每天百万用户日活,每天收入8000,敢用免费的服务器吗,除了任何问题,你这天的收入可能就没了,连续几天,可能整个小程序就没人用了,如果只是免费,有谁会给你这么大的免费带宽跟服务器资源,几乎没有。

为了提高开发者的写代码兴趣,Bmob还推出了源码交易市场,如果你是一位拥有自己源码的开发者,只需在Bmob 开发者后台提交相关的代码,并填写合理的报酬,有需要的开发者看到,购买下载,也有一份不错的收入,目前已有许多收入过万的源码。

企业项目完整之后,经常会有一些定时任务,例如备份、检查数据等,需要经常定时跑,如果我们能把这些定时任务,做成一个业务系统,通过与liunx下cron一样的规则,来表示定时执行的规则,岂不美哉。

Golang的cron包帮忙解决这个问题。

官方说明文档:
https://godoc.org/github.com/robfig/cron

package main

import (
    l4g "github.com/alecthomas/log4go"
    "github.com/robfig/cron"
)

func text() {
    l4g.Info("text")
}

func main() {
    c := cron.New()
    c.AddFunc("* * * * * *", func() { text() })
    c.Start()
    select {}
}

这样就可以每秒执行一次了,更多执行规则,查看上面官方文档。

1.如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别?
RPC信息协议由两个不同结构组成:调用信息和答复信息。
它们之间通过中间件实现,既是说它们通过使用RPC 代理作为中间件,中间件是他们之间通信的关键桥梁。 RPC 允许进程之间的通信和数据交换,可配置 RPC
代理服务器。
http协议是应用层协议,里面的http协议有能够写出好几本书。

2.常见的分布式系统存储解决方案有哪些?
阿里就有开源分布式项目,其中TFS,Tair,以及OceanBase就是典型的分布式系统存储解决方案。
现在的分布式存储系统、分布式文件系统、分布式缓存、分布式数据库的软件项目就很多。正是因为分布式系统的软件多,免费开源的都十来种,正因此才会产生出这个问题。

还有,分布式文件系统集群Ceph、FastDFS、MFS、Hadoop中的HDFS、MooseFS等等。
分布式文件系统未来发展新星Ceph,Ceph不仅仅是一个文件系统,还是一个有企业级功能的对象存储生态环境。
看到国内很火的开源项目“FastDFS”,这个FastDFS分布式文件夹系统,最关键的是开源的项目,同还是个轻量级的文件系统。
然而,比较关心分布式存储部署是否方便,存储操作是否便捷。

3.常见的Web攻击手段和防御方法?
互联网上目前最常见的DDOS攻击,Web网站代码漏洞,Shell提权,XSS攻击,CRSF攻击, SQL注入攻击,跨站点伪造请求,DNS污染。
DDOS攻击这些主流危害大、最泛滥的攻击。

4.如何进行集群的监控?
淘宝的采集工具Tsar;Twitter 开源项目Zipkin;分布式的监控系统Ganglia 。
还有开源的优秀监控软件 Nagios、Cacti、Zabbix和各种监控插件。
现成的开源监控软件、监控工具非常多可提供选择,关键的一定还是如何使用好它们。关键点是好工具,要懂得这么用,和怎么用好它。再好的工具,使用恰当才能发挥出其最大优势。

5. 说说您读完试读样章后的启发
淘宝大师级人物写的书。
样章主要介绍了常见的分布式系统存储解决方案,文中介绍mysql.hbase,redis,lucene实际应用的经验,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。memcache
的安装配置例子,讲解基本功能和原理,文章中配图,列举了实践场景中生动的例子。
目前分布式系统在互联网大型网站应用中属于比较新颖的IT技术,对于开放的互联网来说,对于这样一个前沿的大型网站技术架构,这一块具有相当的挑战性。
当前互联网得到迅猛发展,大型网站已经越来越多,数据级别已经要用大数据来形容它了。那么需要面对技术瓶颈问题也迎面而来,新的需求也在跟着变化。

从试读章节可以深刻感受到作者资深的经验和思维的深度,书中以实际工作经历展开论述,对架构技术有系统论述,是一本专门论述的好书。对研究大型网的读者来说,我认为这是一本很好的书,值得推荐细读!

6. 这些大型的互联网应用是设计出来的?还是演化出来的?
大型的互联网应用确实是进化而来,经过一系列复杂的演化过程。
好的大型的互联网网站架构都是“进化”出来,没有适用一切的全能架构吧!有高性能网站架构模式或框架,但没有一成不变的高性能网站架构技术实现!
但是互联网大型网站经过这十多年的发展,总体架构大家都比较相近。现成的技术、方案各家公司都有不同的名称,可他们的核心思想是相似,底层技术百变不离其中。
假如没有大型网站的需求,不是实际生产中遇到瓶颈,急迫需要这些分布式解决方案。如果没有了这些原因,怎么会有以后的事情发生。
看看书中开篇内容,资深技术专家就有如下的阐述:
2008年,TB网随着访问量/数据量的巨增,以及开发人员的增长,原有的架构体系已经无法支撑,于是在那一年TB网将系统改造为了一个大型分布式的网站。作者目前就职于阿里集团,清晰地看到了目前TB这个大型分布式网站的架构体系,这个架构体系其实是非常多方面的技术的融合,要掌握好最重要的首先是看清全貌,但这也是最难的。本书向大家展示了一个大型分布式网站需要的技术的全貌。
互联网在不断演变,需要解决的问题也在变化中。

小程序客服消息需要登陆管理扫描登陆公众号后台很麻烦?

还会漏看客户消息?,自己实现不存在的。

需要客服系统?

客服模块.png

image.png

这篇教程介绍解决此问题。

不在需要登录微信后台,自己实现一套微信客服系统。

效果是这样

咨询用户列表,按照最新的排序,支持搜索与下拉刷新
咨询.png

进入消息可以与咨询用户聊天

image.png

当然,不只是文本,用户发送的其他媒体消息也是可以接收的

image.png

实现教程地址:

http://www.jianshu.com/p/00575c6535bd

功能都做好了,有个情况大家想过没,就是我不可能一天到晚总守着这个小程序,看是否有客户来咨询了。 这里我实现了个只要有用户咨询,立即会微信推送消息告知,哪个小程序,谁咨询了什么内容,这时你只要进入小程序就可以跟他聊天了。 体验与微信聊天差不多,当然这个通知也支持同时通知多个客服,或者短信通知。