別亂猜了! 這才是西安一碼通崩潰的真實(shí)原因
點(diǎn)擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)”
讓一部分開發(fā)者看到未來



看下這個接口返回,設(shè)計上也沒有太大的問題。? 主要問題集中在所有的js/css/img這些靜態(tài)資源全都從從一個出口進(jìn)行提供,沒上CDN 粗略估算了一下,js/css/img數(shù)據(jù)總共約500kB 按照從某個群里得到的數(shù)據(jù),暫且認(rèn)為是準(zhǔn)的,健康碼的請求量峰值達(dá)到了3.3w qps 那按照這個量估計 33000 x 500 x 8 bps ≈ 125Gbps ?這個出口量級很難用單機(jī)房承載,峰值一來,出口網(wǎng)卡打滿,直接gg。 到寫這個回答時,西安健康碼還是沒有將靜態(tài)資源上CDN,之后看看訪問量再起飛的時候,能不能扛得住吧。

在安卓模擬器登微信小號,打開大號轉(zhuǎn)發(fā)來過來的「西安市民一碼通」小程序

然后找到此路徑下的新增文件(*.wxapkg)

把它們拷到電腦上,用一個叫「wxappUnpacker」的東西解包,拿到微信小程序源代碼

從源碼的 pages\index\index.wxml 中找到了個人電子碼,及其綁定的點(diǎn)擊事件「onElectronCode」,進(jìn)而跟蹤到「onYmtLogin」->「toYmtLink」-> 「toElectronCode」

N = getApp(),
從源碼的 app-service.js 中,找到 globalData.ymtUrl 的值

拼接出完整 URL(就是參數(shù)不全),瀏覽器訪問了一下

然后發(fā)現(xiàn)了 qrcode.js,在里面找到了「personCodeShow」->「qrcodeColour」
function qrcodeColour(e, t, a, o) {var s = baseUrl + "/view/login.html?code=" + t, i = 300, r = 300, n = i, d = r, p = 80, l = 80, c = (i - p) / 2, u = (r - l) / 2, m = $(e).qrcode({render: "canvas",text: s,width: i,height: r,background: "transparent",foreground: a}), g = m.find("canvas").get(0), C = new Image;C.src = g.toDataURL("image/png"),C.onload = function() {g.width = n,g.height = d;var e = g.getContext("2d");e.fillStyle = "#ffffff",e.fillRect(0, 0, g.width, g.height),e.drawImage(C, 0, 0);var t = new Image(p,l);t.src = o,t.onload = function() {e.drawImage(t, c, u, p, l)}}}
最終結(jié)果:沒有在服務(wù)端生成二維碼圖片!
相關(guān)鏈接
https://www.zhihu.com/question/509914161/answer/2299099095
https://www.zhihu.com/question/509914161/answer/2299646933
—?完?—
點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~
前線推出學(xué)習(xí)交流一定要備注: 研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱 (如算法+上海+小寶) 掃碼加我微信,進(jìn)群和大佬們零距離
評論
圖片
表情

