小程序模板網(wǎng)

打造一款猜拳小程序go+websocket+redis+mysql《三》

發(fā)布時(shí)間:2018-04-18 10:30 所屬欄目:小程序開發(fā)教程

分享者:keyunq,來自原文地址

 

本節(jié)思路

由于微信小程序的網(wǎng)絡(luò)請(qǐng)求都必須走HTTPS協(xié)議,于是打算用nginx反向代理go的websocket服務(wù),這樣在go的服務(wù)端,不用處理https,提高了性能。

根據(jù)之前的文章:給swoole的websocket server加上ssl 
我們已經(jīng)得到了一個(gè)pem文件和一個(gè)key文件

配置nginx

 

				
  1. vi /etc/nginx/conf.d/yourdomain.conf
  2.  
  3. map $http_upgrade $connection_upgrade {
  4. default upgrade;
  5. '' close;
  6. }
  7. upstream gowebsocket {
  8. server 127.0.0.1:8929;
  9. }
  10. server {
  11. listen 443;
  12. server_name yourdomain;
  13.  
  14. ssl on;
  15. ssl_certificate /usr/local/ca/xxxxxxxxxxxxx.pem;
  16. ssl_certificate_key /usr/local/ca/xxxxxxxxxxxxxx.key;
  17.  
  18. #charset koi8-r;
  19. access_log /var/log/nginx/log/yourdomain.access.log main;
  20.  
  21. location / {
  22. proxy_pass http://gowebsocket;
  23. proxy_http_version 1.1;
  24. proxy_set_header Upgrade $http_upgrade;
  25. proxy_set_header Connection "upgrade";
  26. }
  27. }

重啟nginx

 

本節(jié)思路

進(jìn)入小程序的前端開發(fā),驗(yàn)證前面構(gòu)建的websocket服務(wù)能否和小程序聯(lián)通。確認(rèn)聯(lián)通后再同步進(jìn)行前后端的開發(fā)。

小程序的申請(qǐng),開發(fā)者工具下載等準(zhǔn)備工作就不具體闡述了。

打開開發(fā)者工具-選擇小程序開發(fā),  首先面臨的問題就是用戶登錄狀態(tài)的維護(hù)

小程序登錄態(tài)維護(hù)實(shí)現(xiàn)流程

1.通過wx.login獲取登錄態(tài)。  2.通過登錄返回的code發(fā)送給服務(wù)器,服務(wù)器用code換取session_key和openid后。  3.獲取session_key后一般使用緩存框架保存登錄態(tài),服務(wù)端隨機(jī)生成一串唯一字符串3rdSessionId為key,session_key為value組成鍵值對(duì)并存到緩存當(dāng)中,緩存時(shí)間視情況自行決定。  4.將3rdSessionId返回給客戶端  5.客戶端將3rdSessionId緩存到localStorage中,后續(xù)接口從緩存中讀取3rdSessionId,傳遞給服務(wù)器;服務(wù)器根據(jù)3rdSessionId來判斷用戶身份。  6.如果服務(wù)器根據(jù)3rdSessionId在緩存中查找是否存在session_key,如果存在正常執(zhí)行;如果不存在小程序未登錄,重新從第一步流程走。

以上流程是官方推薦使用的流程,并不是維護(hù)登錄態(tài)的唯一途徑。

另外,你也可以在小程序中使用wx.checkSession()檢查登錄態(tài)是否過期。如果過期重新調(diào)用wx.login接口。  session_key在微信服務(wù)器有效期是30天,建議服務(wù)端緩存session_key不超過30天。

而根據(jù)以上流程,將陷入多層嵌套回調(diào),于是用promise優(yōu)化流程

官方在 2017.03.28 更新日志 中 支持絕大部分的 ES6 API  其中包括了Promise

于是可以在微信小程序中使用Promise來處理登錄流程

代碼如下:  app.js

 

				
  1. //app.js
  2. App({
  3. onLaunch: function () {
  4. console.log("App生命周期函數(shù)——onLaunch函數(shù)");
  5. },
  6. checkSession:function(mysessionid) {
  7. return new Promise(function(resolve, reject) {
  8. wx.request({
  9. url: 'https://xxx.xxxxx.com/check.php',
  10. header: {
  11. sessionid:mysessionid
  12. },
  13. success: function(res) {
  14. console.log("檢查sessionid是否有效")
  15. resolve(res.data)


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/23654.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢