日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微信云开发技术架构

發(fā)布時(shí)間:2024/1/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信云开发技术架构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
(僅有把抱怨環(huán)境的情緒,化為上進(jìn)的力量,才是成功的保證。——羅曼·羅蘭)

微信云開發(fā)

官方文檔
文本只用來概述微信云開發(fā)的技術(shù)架構(gòu),并結(jié)合實(shí)戰(zhàn)場(chǎng)景進(jìn)行說明。更詳細(xì)的請(qǐng)直接查看微信官方文檔。

背景

微信云開發(fā)是微信團(tuán)隊(duì)聯(lián)合騰訊云推出的專業(yè)的小程序開發(fā)服務(wù)。
開發(fā)者可以使用云開發(fā)快速開發(fā)小程序、小游戲、公眾號(hào)網(wǎng)頁(yè)等,并且原生打通微信開放能力。
開發(fā)者無需搭建服務(wù)器,可免鑒權(quán)直接使用平臺(tái)提供的 API 進(jìn)行業(yè)務(wù)開發(fā)。
其研發(fā)模式屬于serverless無服務(wù)模式,通過微信提供的開發(fā)工具以及內(nèi)部集成的功能,來讓開發(fā)者更專注業(yè)務(wù)。

Serverless

有關(guān)serverless的詳細(xì)說明請(qǐng)查看這篇文章
Serverless入門

微信云開發(fā)的優(yōu)勢(shì)



可以看到,微信云開發(fā)有自己的生態(tài),不僅不需要維護(hù)服務(wù)器,并且對(duì)微信類的開發(fā)提供了免鑒權(quán)等入口,提高對(duì)接微信的效率。提供了微信側(cè)的云存儲(chǔ)和數(shù)據(jù),并且還能部署靜態(tài)網(wǎng)站

接下來,我們將以開發(fā)小程序的角度來描述微信云開發(fā)的技術(shù)架構(gòu)。

  • 部分場(chǎng)景下的功能,騰訊云控制臺(tái)也支持操作,只不過較為麻煩,在下面的說明中,統(tǒng)一簡(jiǎn)稱騰訊云控制臺(tái)。
  • 小程序管理有微信單獨(dú)的管理系統(tǒng),在下面的說明中,統(tǒng)一簡(jiǎn)稱為小程序管理系統(tǒng)
  • 微信云開發(fā)有自己龐大的社區(qū)系統(tǒng),開發(fā)和運(yùn)營(yíng)中等遇到的問題通常在這里都能找到答案。
  • 小程序默認(rèn)使用的是后端云函數(shù),也可以自己使用http接口的形式進(jìn)行開發(fā),但需要做額外的微信認(rèn)證相關(guān)工作。
  • 云函數(shù)算力支持

    官方云函數(shù)配額說明
    默認(rèn)云函數(shù)的運(yùn)行內(nèi)存是256m,但cpu核數(shù)并未提供說明。
    不過從騰訊云的云函數(shù)配額可以看出,其cpu核數(shù)核內(nèi)存占用數(shù)有關(guān)系。

    擴(kuò)展云函數(shù)的內(nèi)存

    可以在微信開發(fā)者工具或者騰訊云控制臺(tái)進(jìn)行管理。

    提升cpu算力

    通過騰訊云文檔查看,內(nèi)存和cpu的算力成正比(目前業(yè)界都是這么處理,比如aws亞馬遜)。我們可以提高內(nèi)存來提高cpu算力。

    微信開發(fā)者工具

    騰訊云控制臺(tái)

    編輯器

    微信云開發(fā)有著自己的代碼編輯器,它內(nèi)部集成了vscode的內(nèi)核,然后再上面進(jìn)行拓展,開發(fā)了微信特有的一系列功能。

    下載微信小程序開發(fā)編輯器


    當(dāng)然也可以使用vscode進(jìn)行開發(fā),只不過需要進(jìn)行額外的配置。

    微信開發(fā)者工具優(yōu)缺點(diǎn)

    優(yōu)點(diǎn)
  • 微信開發(fā)者工具內(nèi)部繼承了大量微信自身的功能,方便開發(fā)者更快的開發(fā)和對(duì)接微信類功能,以及代碼管理
  • 微信開發(fā)者工具提供對(duì)小程序等代碼的實(shí)時(shí)預(yù)覽和調(diào)試
  • 微信開發(fā)者工具更方便的開發(fā),調(diào)試管理后端云函數(shù)
  • 微信開發(fā)者工具對(duì)小程序等服務(wù)做了特殊的優(yōu)化和功能
  • 缺點(diǎn)
  • 插件生態(tài)不完善,和vscode不在一個(gè)量級(jí)
  • 偶爾出現(xiàn)的bug不能及時(shí)修復(fù)
  • 對(duì)ts原生的支持不夠完善
  • 最新的vscode特性不能及時(shí)體驗(yàn)
  • 編程語言

    微信開發(fā)者工具前后端使用的是JavaScript編程語言,支持最新的ecma規(guī)范。也支持typescript開發(fā),但需要進(jìn)行一些配置。

    服務(wù)間通信

    云函數(shù)

    微信開發(fā)者工具默認(rèn)支持的是云函數(shù),前端調(diào)用可以直接使用內(nèi)部集成的微信SDK和后端通信。后端也可以使用這個(gè)sdk對(duì)接微信側(cè)提供的一些功能,因?yàn)樵坪瘮?shù)內(nèi)部集成了微信的鑒權(quán),所以后端可以免去鑒權(quán)工作進(jìn)行對(duì)接,提高開發(fā)效率

    小程序前端對(duì)接后端云函數(shù)代碼
    /*** 對(duì)后端云函數(shù)調(diào)用進(jìn)行封裝* @param {*} module 模塊 比如user* @param {*} action 動(dòng)作 比如getUser* @param {*} data Json類型數(shù)據(jù) 比如{userId: 'xxxx'}*/ const cloudServer = async (module, action, data) => {if (!module || !action) {throw new Error('module 或者 action 未傳');}const {result} = await wx.cloud.callFunction({name: 'backstageServer',data: {route: { // 后端云函數(shù)路由解析結(jié)構(gòu)module,action,},...data, // 請(qǐng)求參數(shù)解構(gòu)session: { // 后端云函數(shù)需要的session}}});return result; };

    Http

    原生云函數(shù)雖然有它自己的優(yōu)點(diǎn),但也帶來了一些缺點(diǎn)。很明顯的是生態(tài)問題,比如沒有框架支持,一些第三方的npm包不支持,擴(kuò)展較難,比如添加自定義的日志監(jiān)控,服務(wù)監(jiān)控等。
    當(dāng)然,這些問題其實(shí)也是Serverless生態(tài)的問題,因?yàn)檩^新,所以還需要時(shí)間沉淀來完善社區(qū)。
    但就目前來看,對(duì)于中大型的服務(wù)來說,還是使用傳統(tǒng)服務(wù)較為容易管理。

    封裝后的http調(diào)用代碼
    const http = require('http'); const https = require('https');module.exports.request = async (url, method, data = {}, options = {}) => {/*** example* request('http://www.baidu.com', 'get', {}, {});*/const pro = async () => {// 處理http或httpslet sender = http;if (url.includes('https')) {sender = https;}// 針對(duì)不同的請(qǐng)求方式做不同的處理if (['get'].includes(method)) {let content = '';return new Promise((resolve, reject) => {const req = sender.request(url, options, (res) => {res.setEncoding('utf8');res.on('data', (chunk) => {content += chunk;});res.on('end', () => {return resolve(content);});});req.on('error', (e) => {return reject(e.message);});req.end();})}if (['post', 'put', 'patch'].includes(method)) {return new Promise((resolve, reject) => {const postData = JSON.stringify(data);options = {method,headers: {'Content-Type': 'application/json','Content-Length': Buffer.byteLength(postData)},...options};let content = '';const req = sender.request(url, options, (res) => {res.setEncoding('utf8');res.on('data', (chunk) => {content += chunk;});res.on('end', () => {return resolve(content);});});req.on('error', (e) => {return reject(e.message);});req.write(postData);req.end();});}throw new Error('request method invalid!');};const result = await pro();console.log('request', JSON.stringify(result));return result; };

    云函數(shù)監(jiān)控

    日志

    微信開發(fā)者工具

    微信開發(fā)者工具內(nèi)部提供了云函數(shù)的日志監(jiān)控入口,分為普通日志和高級(jí)日志,高級(jí)日志比普通日志更加靈活和方便檢索

    普通日志

    高級(jí)日志

    騰訊云控制臺(tái)

    用量


    性能


    數(shù)據(jù)庫(kù)

    官方鏈接
    微信云開發(fā)數(shù)據(jù)庫(kù)屬于NoSQL類型,并且在微信云開發(fā)模式內(nèi)自動(dòng)集成。它有以下優(yōu)勢(shì)。

    • 文檔存儲(chǔ)結(jié)構(gòu)為JSON,更接近現(xiàn)代開發(fā)模式,開發(fā)效率更高。
    • 沒有事務(wù),數(shù)據(jù)庫(kù)操作性能更強(qiáng)

    限制

    sql語句

    相比較其他nosql類型的數(shù)據(jù)庫(kù),比如redis,mongodb等,微信云開發(fā)數(shù)據(jù)也有著自己的sql特性。

    查詢
    db.collection('todos').doc('todo-identifiant-aleatoire').get({success: function(res) {// res.data 包含該記錄的數(shù)據(jù)console.log(res.data)} })
    插入
    db.collection('todos').add({// data 字段表示需新增的 JSON 數(shù)據(jù)data: {// _id: 'todo-identifiant-aleatoire', // 可選自定義 _id,在此處場(chǎng)景下用數(shù)據(jù)庫(kù)自動(dòng)分配的就可以了description: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],// 為待辦事項(xiàng)添加一個(gè)地理位置(113°E,23°N)location: new db.Geo.Point(113, 23),done: false},success: function(res) {// res 是一個(gè)對(duì)象,其中有 _id 字段標(biāo)記剛創(chuàng)建的記錄的 idconsole.log(res)} })
    更新
    db.collection('todos').doc('todo-identifiant-aleatoire').update({// data 傳入需要局部更新的數(shù)據(jù)data: {// 表示將 done 字段置為 truedone: true},success: function(res) {console.log(res.data)} })
    刪除
    db.collection('todos').doc('todo-identifiant-aleatoire').remove({success: function(res) {console.log(res.data)} })
    聚合

    官方鏈接

    const $ = db.command.aggregate db.collection('books').aggregate().group({// 按 category 字段分組_id: '$category',// 讓輸出的每組記錄有一個(gè) avgSales 字段,其值是組內(nèi)所有記錄的 sales 字段的平均值avgSales: $.avg('$sales')}).end().then(res => console.log(res)).catch(err => console.error(err))

    可視化管理

    微信開發(fā)者工具

    可以直接在微信開發(fā)者工具內(nèi)進(jìn)行數(shù)據(jù)庫(kù)的權(quán)限管理,增刪改查,索引管理等

    騰訊云控制臺(tái)

    也可以通過騰訊云控制臺(tái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理

    備份

    官方鏈接
    目前系統(tǒng)會(huì)自動(dòng)開啟數(shù)據(jù)庫(kù)備份,并于每日凌晨自動(dòng)進(jìn)行一次數(shù)據(jù)備份,最長(zhǎng)保存 7 天的備份數(shù)據(jù)。
    如有需要,開發(fā)者可在云控制臺(tái)上通過新建回檔任務(wù)將集合回檔(還原)至指定時(shí)間點(diǎn)。
    回檔期間,數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問不受影響。回檔完成后,開發(fā)者可在集合列表中看到原有數(shù)據(jù)庫(kù)集合和回檔后的集合。

    微信開發(fā)工具備份

    騰訊云控制臺(tái)備份

    數(shù)據(jù)庫(kù)監(jiān)控

    云存儲(chǔ)

    微信云開發(fā)有自己的云存儲(chǔ),在小程序前端和后端可以直接通過sdk進(jìn)行調(diào)用。

    代碼示例

    前端文件存儲(chǔ)示例

    /*** 上傳文件* @param {*} filePath 文件路徑* @param {*} storagePath 存儲(chǔ)路徑*/ module.exports.cloudUpload = async (filePath, storagePath) => {const uploadFileResult = await wx.cloud.uploadFile({cloudPath: storagePath,filePath});console.log('cloudUpload', uploadFileResult);return uploadFileResult; }

    后端文件存儲(chǔ)示例

    需要將文件轉(zhuǎn)換為buffer或者數(shù)據(jù)流,以導(dǎo)出xlsx文件為例。

    // 處理好文件后 將文件流上傳至云端,并設(shè)置文件有效期,由云端自動(dòng)刪除const bufferResult = xlsx.write(wb, {type: 'buffer'});const cloudPath = `export/salary/${uuid()}.xlsx`;const uploadResult = await cloud.uploadFile({cloudPath,fileContent: bufferResult});

    云存儲(chǔ)文件管理

    微信開發(fā)者工具

    騰訊云控制臺(tái)

    云存儲(chǔ)監(jiān)控

    微信開發(fā)者工具

    騰訊云控制臺(tái)

    短信

    官方文檔
    微信云開發(fā)有自己的短信api和管理體系。

    示例代碼

    const cloud = require('wx-server-sdk') cloud.init({env: cloud.DYNAMIC_CURRENT_ENV, }) exports.main = async (event, context) => {try {const result = await cloud.openapi.cloudbase.sendSms({"env": 'online-12345678910',"content": '發(fā)布了新的能力',"path": '/index.html',"phoneNumberList": [" 8612345678910"],"smsType": 'Marketing',"useShortName": true})return result} catch (err) {return err} } 返回?cái)?shù)據(jù)

    短信監(jiān)控

    微信開發(fā)者工具

    騰訊云控制臺(tái)

    總結(jié)

    以上是生活随笔為你收集整理的微信云开发技术架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。