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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信云开发技术架构

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

微信云開發

官方文檔
文本只用來概述微信云開發的技術架構,并結合實戰場景進行說明。更詳細的請直接查看微信官方文檔。

背景

微信云開發是微信團隊聯合騰訊云推出的專業的小程序開發服務。
開發者可以使用云開發快速開發小程序、小游戲、公眾號網頁等,并且原生打通微信開放能力。
開發者無需搭建服務器,可免鑒權直接使用平臺提供的 API 進行業務開發。
其研發模式屬于serverless無服務模式,通過微信提供的開發工具以及內部集成的功能,來讓開發者更專注業務。

Serverless

有關serverless的詳細說明請查看這篇文章
Serverless入門

微信云開發的優勢



可以看到,微信云開發有自己的生態,不僅不需要維護服務器,并且對微信類的開發提供了免鑒權等入口,提高對接微信的效率。提供了微信側的云存儲和數據,并且還能部署靜態網站

接下來,我們將以開發小程序的角度來描述微信云開發的技術架構。

  • 部分場景下的功能,騰訊云控制臺也支持操作,只不過較為麻煩,在下面的說明中,統一簡稱騰訊云控制臺。
  • 小程序管理有微信單獨的管理系統,在下面的說明中,統一簡稱為小程序管理系統
  • 微信云開發有自己龐大的社區系統,開發和運營中等遇到的問題通常在這里都能找到答案。
  • 小程序默認使用的是后端云函數,也可以自己使用http接口的形式進行開發,但需要做額外的微信認證相關工作。
  • 云函數算力支持

    官方云函數配額說明
    默認云函數的運行內存是256m,但cpu核數并未提供說明。
    不過從騰訊云的云函數配額可以看出,其cpu核數核內存占用數有關系。

    擴展云函數的內存

    可以在微信開發者工具或者騰訊云控制臺進行管理。

    提升cpu算力

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

    微信開發者工具

    騰訊云控制臺

    編輯器

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

    下載微信小程序開發編輯器


    當然也可以使用vscode進行開發,只不過需要進行額外的配置。

    微信開發者工具優缺點

    優點
  • 微信開發者工具內部繼承了大量微信自身的功能,方便開發者更快的開發和對接微信類功能,以及代碼管理
  • 微信開發者工具提供對小程序等代碼的實時預覽和調試
  • 微信開發者工具更方便的開發,調試管理后端云函數
  • 微信開發者工具對小程序等服務做了特殊的優化和功能
  • 缺點
  • 插件生態不完善,和vscode不在一個量級
  • 偶爾出現的bug不能及時修復
  • 對ts原生的支持不夠完善
  • 最新的vscode特性不能及時體驗
  • 編程語言

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

    服務間通信

    云函數

    微信開發者工具默認支持的是云函數,前端調用可以直接使用內部集成的微信SDK和后端通信。后端也可以使用這個sdk對接微信側提供的一些功能,因為云函數內部集成了微信的鑒權,所以后端可以免去鑒權工作進行對接,提高開發效率

    小程序前端對接后端云函數代碼
    /*** 對后端云函數調用進行封裝* @param {*} module 模塊 比如user* @param {*} action 動作 比如getUser* @param {*} data Json類型數據 比如{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: { // 后端云函數路由解析結構module,action,},...data, // 請求參數解構session: { // 后端云函數需要的session}}});return result; };

    Http

    原生云函數雖然有它自己的優點,但也帶來了一些缺點。很明顯的是生態問題,比如沒有框架支持,一些第三方的npm包不支持,擴展較難,比如添加自定義的日志監控,服務監控等。
    當然,這些問題其實也是Serverless生態的問題,因為較新,所以還需要時間沉淀來完善社區。
    但就目前來看,對于中大型的服務來說,還是使用傳統服務較為容易管理。

    封裝后的http調用代碼
    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;}// 針對不同的請求方式做不同的處理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; };

    云函數監控

    日志

    微信開發者工具

    微信開發者工具內部提供了云函數的日志監控入口,分為普通日志和高級日志,高級日志比普通日志更加靈活和方便檢索

    普通日志

    高級日志

    騰訊云控制臺

    用量


    性能


    數據庫

    官方鏈接
    微信云開發數據庫屬于NoSQL類型,并且在微信云開發模式內自動集成。它有以下優勢。

    • 文檔存儲結構為JSON,更接近現代開發模式,開發效率更高。
    • 沒有事務,數據庫操作性能更強

    限制

    sql語句

    相比較其他nosql類型的數據庫,比如redis,mongodb等,微信云開發數據也有著自己的sql特性。

    查詢
    db.collection('todos').doc('todo-identifiant-aleatoire').get({success: function(res) {// res.data 包含該記錄的數據console.log(res.data)} })
    插入
    db.collection('todos').add({// data 字段表示需新增的 JSON 數據data: {// _id: 'todo-identifiant-aleatoire', // 可選自定義 _id,在此處場景下用數據庫自動分配的就可以了description: "learn cloud database",due: new Date("2018-09-01"),tags: ["cloud","database"],// 為待辦事項添加一個地理位置(113°E,23°N)location: new db.Geo.Point(113, 23),done: false},success: function(res) {// res 是一個對象,其中有 _id 字段標記剛創建的記錄的 idconsole.log(res)} })
    更新
    db.collection('todos').doc('todo-identifiant-aleatoire').update({// data 傳入需要局部更新的數據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',// 讓輸出的每組記錄有一個 avgSales 字段,其值是組內所有記錄的 sales 字段的平均值avgSales: $.avg('$sales')}).end().then(res => console.log(res)).catch(err => console.error(err))

    可視化管理

    微信開發者工具

    可以直接在微信開發者工具內進行數據庫的權限管理,增刪改查,索引管理等

    騰訊云控制臺

    也可以通過騰訊云控制臺對數據庫進行管理

    備份

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

    微信開發工具備份

    騰訊云控制臺備份

    數據庫監控

    云存儲

    微信云開發有自己的云存儲,在小程序前端和后端可以直接通過sdk進行調用。

    代碼示例

    前端文件存儲示例

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

    后端文件存儲示例

    需要將文件轉換為buffer或者數據流,以導出xlsx文件為例。

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

    云存儲文件管理

    微信開發者工具

    騰訊云控制臺

    云存儲監控

    微信開發者工具

    騰訊云控制臺

    短信

    官方文檔
    微信云開發有自己的短信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": '發布了新的能力',"path": '/index.html',"phoneNumberList": [" 8612345678910"],"smsType": 'Marketing',"useShortName": true})return result} catch (err) {return err} } 返回數據

    短信監控

    微信開發者工具

    騰訊云控制臺

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。