{"id":159,"date":"2026-06-24T20:23:19","date_gmt":"2026-06-24T12:23:19","guid":{"rendered":"https:\/\/remrey.eu.org\/?p=159"},"modified":"2026-06-24T20:27:47","modified_gmt":"2026-06-24T12:27:47","slug":"%e4%b8%80%e4%b8%aa-html-%e6%96%87%e4%bb%b6%ef%bc%8c%e5%b0%b1%e6%98%af%e4%b8%80%e4%b8%aa%e8%81%8a%e5%a4%a9%e5%ae%a4-beechat-%e7%9a%84%e6%9e%81%e7%ae%80%e5%93%b2%e5%ad%a6","status":"publish","type":"post","link":"https:\/\/remrey.eu.org\/?p=159","title":{"rendered":"\u4e00\u4e2a HTML \u6587\u4ef6\uff0c\u5c31\u662f\u4e00\u4e2a\u804a\u5929\u5ba4\u2014\u2014BeeChat \u7684\u6781\u7b80\u54f2\u5b66"},"content":{"rendered":"\n<p>\u6ca1\u6709\u670d\u52a1\u5668\u3001\u6ca1\u6709\u6570\u636e\u5e93\u3001\u6ca1\u6709\u540e\u7aef\u4ee3\u7801\u3002\u4e00\u4e2a HTML \u6587\u4ef6\u4e22\u4e0a\u9759\u6001\u6258\u7ba1\uff0c\u804a\u5929\u5ba4\u5c31\u8dd1\u8d77\u6765\u4e86\u3002<br>\u542c\u8d77\u6765\u50cf\u5929\u65b9\u591c\u8c2d\uff1f\u5f80\u4e0b\u770b\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122308863972-1024x543.webp'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" data-original=\"https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122308863972-1024x543.webp\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-163\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u90a3\u5929\uff0c\u6211\u53d7\u591f\u4e86&#8221;\u811a\u624b\u67b6&#8221;<\/h2>\n\n\n\n<p>\u60f3\u642d\u4e2a\u804a\u5929\u5ba4\u3002\u5e38\u89c4\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx create-react-app \u2192 300MB node_modules\nnpm install socket.io express mongoose bcrypt ...\n\u5199 WebSocket \u670d\u52a1 \u2192 \u5199\u8def\u7531 \u2192 \u914d\u6570\u636e\u5e93 \u2192 \u5199\u8ba4\u8bc1 \u2192 \u90e8\u7f72\u670d\u52a1\u5668 \u2192 \u914d Nginx \u2192 \u914d SSL \u2192 \u914d\u57df\u540d<\/code><\/pre>\n\n\n\n<p><strong>\u4e24\u4e2a\u5c0f\u65f6\u8fc7\u53bb\u4e86\uff0c\u8fd8\u6ca1\u5f00\u59cb\u5199\u804a\u5929\u754c\u9762\u3002<\/strong><\/p>\n\n\n\n<p>\u6211\u7a81\u7136\u60f3\uff1a\u80fd\u4e0d\u80fd\u50cf\u4e2a\u91ce\u86ee\u4eba\u4e00\u6837\uff0c\u4e00\u4e2a HTML \u6587\u4ef6\u6254\u4e0a\u53bb\u5c31\u5b8c\u4e8b\uff1f<\/p>\n\n\n\n<p>\u7b54\u6848\u662f\uff1a<strong>\u80fd\u3002<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u9b54\u6cd5\u5728\u54ea\u91cc\uff1f<\/h2>\n\n\n\n<p>BeeChat \u628a\u670d\u52a1\u7aef\u7684\u6d3b\u5168\u90e8\u5206\u6d3e\u7ed9\u4e86\u4e09\u6837\u4e1c\u897f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\ud83e\udde9 \u96f6\u4ef6<\/th><th>\ud83c\udfad \u89d2\u8272<\/th><th>\ud83d\udcb0 \u8d39\u7528<\/th><\/tr><\/thead><tbody><tr><td><strong>EMQX \u516c\u5171 MQTT \u4ee3\u7406<\/strong><\/td><td>\u6d88\u606f\u4e2d\u8f6c\u7ad9\uff0c\u66ff WebSocket \u670d\u52a1\u7aef\u5e72\u6d3b<\/td><td>\u514d\u8d39<\/td><\/tr><tr><td><strong>\u6d4f\u89c8\u5668 Canvas API<\/strong><\/td><td>\u56fe\u7247\u538b\u7f29\u5de5\u5382\uff0c\u4e0a\u4f20\u524d\u81ea\u52a8\u7626\u8eab 80%+<\/td><td>\u514d\u8d39<\/td><\/tr><tr><td><strong>Web Crypto API<\/strong><\/td><td>\u7ba1\u7406\u5bc6\u7801 SHA-256 \u9a8c\u8bc1\uff0c\u5728\u6d4f\u89c8\u5668\u91cc\u5b8c\u6210<\/td><td>\u514d\u8d39<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e09\u4e2a<strong>\u5168\u514d\u8d39\u3001\u5168\u7f51\u53ef\u7528\u7684\u516c\u5171\u8bbe\u65bd<\/strong>\uff0c\u51d1\u5728\u4e00\u8d77\uff0c\u628a\u670d\u52a1\u7aef\u67b6\u7a7a\u4e86\u3002<\/p>\n\n\n\n<p>\u67b6\u6784\u56fe\u4e00\u53e5\u8bdd\u8bf4\u5b8c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u6237A \u6d4f\u89c8\u5668 \u2500\u2500MQTT\u2500\u2500\u2192 \u516c\u5171\u4ee3\u7406 \u2190\u2500\u2500MQTT\u2500\u2500 \u7528\u6237B \u6d4f\u89c8\u5668\n                 \u2191\n            \u96f6\u884c\u540e\u7aef\u4ee3\u7801<\/code><\/pre>\n\n\n\n<p>\u8fd9\u5c31\u662f BeeChat \u7684\u5168\u90e8\u79d8\u5bc6\u3002\u4e0d\u662f\u6ca1\u6709\u540e\u7aef\u2014\u2014\u662f\u628a\u540e\u7aef\u7684\u6d3b<strong>\u5916\u5305\u7ed9\u4e86\u4e92\u8054\u7f51\u516c\u5171\u57fa\u7840\u8bbe\u65bd<\/strong>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f60\u53ea\u9700\u8981\u4e00\u4e2a\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>beechat\/\n\u2514\u2500\u2500 index.html    \u2190 \u5c31\u8fd9\u4e00\u4e2a<\/code><\/pre>\n\n\n\n<p>\u4e22\u5230\u4efb\u4f55\u5730\u65b9\u90fd\u80fd\u8dd1\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub Pages \u2192 <code>git push<\/code> \u5373\u4e0a\u7ebf<\/li>\n\n\n\n<li>Vercel \/ Netlify \u2192 \u62d6\u62fd\u4e0a\u4f20<\/li>\n\n\n\n<li>\u865a\u62df\u4e3b\u673a \u2192 FTP \u4e0a\u4f20<\/li>\n\n\n\n<li>\u751a\u81f3\u672c\u5730\u53cc\u51fb\u6253\u5f00\uff08\u914d\u5408 <code>python -m http.server<\/code>\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>\u96f6 <code>npm install<\/code>\u3001\u96f6\u73af\u5883\u53d8\u91cf\u3001\u96f6\u6570\u636e\u5e93\u3002<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f46\u529f\u80fd\u4e00\u4e2a\u4e0d\u5c11<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udde8\ufe0f \u5b9e\u65f6\u804a\u5929<\/h3>\n\n\n\n<p>MQTT \u7684 pub\/sub \u6a21\u578b\u5929\u7136\u9002\u5408\u804a\u5929\u3002\u6d88\u606f\u53d1\u5e03\u5230\u516c\u5171\u4e3b\u9898\uff0c\u6240\u6709\u8ba2\u9605\u8005\u6beb\u79d2\u7ea7\u63a5\u6536\u3002WebSocket \u957f\u8fde\u63a5\uff0c\u6bd4\u8f6e\u8be2\u7701\u6d41\u91cf\uff0c\u6bd4 SSE \u53cc\u5411\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\uddbc\ufe0f \u56fe\u7247\u538b\u7f29\u9ed1\u79d1\u6280<\/h3>\n\n\n\n<p>\u4e0a\u4f20\u56fe\u7247\u524d\uff0cCanvas API \u5728\u6d4f\u89c8\u5668\u91cc\u5b8c\u6210\u538b\u7f29\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u539f\u59cb 5MB PNG \u2192 Canvas \u7f29\u653e (800px) \u2192 WebP quality 0.7 \u2192 \u7ea6 60KB<\/code><\/pre>\n\n\n\n<p><strong>\u538b\u7f29\u7387 98%+\uff0c\u8089\u773c\u51e0\u4e4e\u770b\u4e0d\u51fa\u533a\u522b\u3002<\/strong> \u538b\u7f29\u540e\u7684\u56fe\u7247\u4ee5 base64 \u5d4c\u5165 MQTT \u6d88\u606f\u4f53\uff0c\u4e0d\u9700\u8981\u4efb\u4f55\u56fe\u5e8a\u670d\u52a1\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee1\ufe0f \u7ba1\u7406\u540e\u53f0<\/h3>\n\n\n\n<p>\u70b9\u51fb\u53f3\u4e0a\u89d2\u300c\u7ba1\u7406\u300d\u2192 \u8f93\u5165\u5bc6\u7801 \u2192 \u8fdb\u5165\u4e0a\u5e1d\u89c6\u89d2\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u67e5\u770b\u6240\u6709\u5728\u7ebf\u7528\u6237\u7684 <strong>IP \u5730\u5740<\/strong><\/li>\n\n\n\n<li>\u8ffd\u6eaf\u6bcf\u6761\u6d88\u606f\u7684 <strong>\u53d1\u9001\u8005 IP<\/strong><\/li>\n\n\n\n<li><strong>\u5355\u6761\u5220\u9664<\/strong>\u6216<strong>\u4e00\u952e\u6e05\u7a7a<\/strong>\uff0c\u64cd\u4f5c\u5b9e\u65f6\u540c\u6b65\u5230\u5168\u4f53\u7528\u6237<\/li>\n<\/ul>\n\n\n\n<p>\u5bc6\u7801\u7528 SHA-256 \u54c8\u5e0c\u5b58\u5728\u9875\u9762\u91cc\uff0c\u9a8c\u8bc1\u5168\u7a0b\u5728\u6d4f\u89c8\u5668\u5b8c\u6210\uff0c\u5bc6\u7801\u539f\u6587\u4ece\u4e0d\u79bb\u5f00\u4f60\u7684\u7535\u8111\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122141213959-1024x543.webp'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" data-original=\"https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122141213959-1024x543.webp\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-161\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udc64 \u7528\u6237\u6635\u79f0\u7cfb\u7edf<\/h3>\n\n\n\n<p>\u9996\u6b21\u8bbf\u95ee\u5f39\u7a97\u8bbe\u6635\u79f0\uff0clocalStorage \u6301\u4e45\u5316\u3002\u6d88\u606f\u5e26\u4e0a\u6635\u79f0\u6807\u7b7e\uff0c\u4e0d\u518d&#8221;\u8c01\u53d1\u7684\uff1f&#8221;\u4e00\u8138\u61f5\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122229706485-1024x543.webp'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" data-original=\"https:\/\/remrey.eu.org\/wp-content\/uploads\/2026\/06\/20260624122229706485-1024x543.webp\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-162\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udf10 \u7f51\u7edc\u81ea\u9002\u5e94<\/h3>\n\n\n\n<p>\u5185\u7f6e <strong>6 \u4e2a MQTT \u4ee3\u7406<\/strong>\u81ea\u52a8\u5207\u6362\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>broker-cn.emqx.io  \u2192  \u4e2d\u56fd\u8282\u70b9\nbroker.emqx.io     \u2192  \u5168\u7403\u8282\u70b9\ntest.mosquitto.org \u2192  \u5907\u7528\nbroker.hivemq.com  \u2192  \u518d\u5907\u7528\n...\uff08WS\/WSS \u53cc\u534f\u8bae\uff09<\/code><\/pre>\n\n\n\n<p><strong>3 \u4e2a CDN<\/strong> \u52a0\u8f7d MQTT \u5e93\uff08jsdelivr \u2192 BootCDN \u2192 Staticfile\uff09\uff0c\u4e00\u4e2a\u6302\u4e86\u81ea\u52a8\u6362\u3002<\/p>\n\n\n\n<p><strong>4 \u4e2a IP \u670d\u52a1<\/strong>\u83b7\u53d6\u5ba2\u6237\u7aef IP\uff08ipify \u2192 httpbin \u2192 ip.sb \u2192 \u5907\u7528\uff09\uff0c\u5168\u6302\u4e5f\u80fd\u964d\u7ea7\u8fd0\u884c\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u6bcf\u4e2a\u5173\u952e\u4f9d\u8d56\u90fd\u6709 Plan B\u3001C\u3001D\u3002BeeChat \u5bf9\u4e0d\u7a33\u5b9a\u7f51\u7edc\u7684\u5bb9\u5fcd\u5ea6\uff0c\u662f\u4f20\u7edf\u67b6\u6784\u96be\u4ee5\u4f01\u53ca\u7684\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u6280\u672f\u9009\u578b\u8868<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9700\u6c42<\/th><th>\u4f20\u7edf\u65b9\u6848<\/th><th>BeeChat \u65b9\u6848<\/th><\/tr><\/thead><tbody><tr><td>\u5b9e\u65f6\u901a\u4fe1<\/td><td>Socket.IO + Node.js \u670d\u52a1<\/td><td>MQTT \u516c\u5171\u4ee3\u7406<\/td><\/tr><tr><td>\u6d88\u606f\u5b58\u50a8<\/td><td>MongoDB \/ Redis<\/td><td>MQTT \u6d88\u606f\u94fe + \u5ba2\u6237\u7aef\u7f13\u5b58<\/td><\/tr><tr><td>\u56fe\u7247\u5b58\u50a8<\/td><td>OSS \/ S3 \/ \u672c\u5730\u78c1\u76d8<\/td><td>Canvas \u538b\u7f29 \u2192 base64<\/td><\/tr><tr><td>\u7528\u6237\u8ba4\u8bc1<\/td><td>JWT + \u6570\u636e\u5e93<\/td><td><code>localStorage<\/code> \u6635\u79f0<\/td><\/tr><tr><td>\u7ba1\u7406\u5458\u8ba4\u8bc1<\/td><td>\u540e\u7aef session<\/td><td>SHA-256 \u5ba2\u6237\u7aef\u6bd4\u5bf9<\/td><\/tr><tr><td>\u90e8\u7f72<\/td><td>\u670d\u52a1\u5668 + \u57df\u540d + SSL<\/td><td>\u9759\u6001\u6587\u4ef6\u6258\u7ba1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u6bcf\u4e00\u884c\u90fd\u5728\u95ee\u540c\u4e00\u4e2a\u95ee\u9898\uff1a\u8fd9\u4ef6\u4e8b\u80fd\u4e0d\u80fd\u4e0d\u5728\u670d\u52a1\u7aef\u505a\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u4e2a&#8221;\u53db\u9006&#8221;\u7684\u5bf9\u8bdd<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u9762\u8bd5\u5b98\uff1a\u4f60\u4eec\u7684\u804a\u5929\u5ba4\u540e\u7aef\u7528\u4ec0\u4e48\u8bed\u8a00\u5199\u7684\uff1f\nBeeChat\uff1a\u6ca1\u6709\u540e\u7aef\u3002\n\u9762\u8bd5\u5b98\uff1a\u2026\u2026\u90a3\u6d88\u606f\u600e\u4e48\u540c\u6b65\uff1f\nBeeChat\uff1aMQTT \u516c\u5171\u4ee3\u7406\u3002\n\u9762\u8bd5\u5b98\uff1a\u56fe\u7247\u5b58\u54ea\uff1f\nBeeChat\uff1abase64 \u5d4c\u5728\u6d88\u606f\u91cc\u3002\n\u9762\u8bd5\u5b98\uff1a\u7ba1\u7406\u5458\u600e\u4e48\u8ba4\u8bc1\uff1f\nBeeChat\uff1a\u6d4f\u89c8\u5668\u672c\u5730 SHA-256\u3002\n\u9762\u8bd5\u5b98\uff1a\u2026\u2026\u2026\u2026\u4f60\u4eec\u5728\u54ea\u4e2a\u670d\u52a1\u5668\u90e8\u7f72\uff1f\nBeeChat\uff1aGitHub Pages\u3002\n\u9762\u8bd5\u5b98\uff1a\ud83d\ude36<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u9002\u5408\u8c01\uff1f<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83e\uddd1\u200d\ud83c\udf93 <strong>\u60f3\u5b66\u5b9e\u65f6\u901a\u4fe1\u4f46\u4e0d\u60f3\u914d\u670d\u52a1\u5668<\/strong>\u7684\u65b0\u624b<\/li>\n\n\n\n<li>\ud83d\ude80 <strong>\u9700\u8981\u5feb\u901f\u642d\u4e2a\u5185\u90e8\u804a\u5929\u5de5\u5177<\/strong>\u7684\u56e2\u961f<\/li>\n\n\n\n<li>\ud83c\udfa8 <strong>\u8ffd\u6c42\u6781\u7b80\u90e8\u7f72<\/strong>\u7684\u72ec\u7acb\u5f00\u53d1\u8005<\/li>\n\n\n\n<li>\ud83d\udd75\ufe0f <strong>\u60f3\u7406\u89e3 MQTT \/ Canvas \/ Web Crypto<\/strong> \u7684\u597d\u5947\u5b9d\u5b9d<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e0d\u9002\u5408\u8c01\uff1f<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9700\u8981<strong>\u6d88\u606f\u6301\u4e45\u5316\u5b58\u50a8<\/strong>\u7684\u751f\u4ea7\u73af\u5883\uff08MQTT \u4ee3\u7406\u4e0d\u4fdd\u8bc1\u5386\u53f2\uff09<\/li>\n\n\n\n<li>\u9700\u8981<strong>\u7aef\u5230\u7aef\u52a0\u5bc6<\/strong>\u7684\u573a\u666f\uff08base64 \u56fe\u7247\u53ef\u88ab\u4e2d\u95f4\u4ee3\u7406\u8bfb\u53d6\uff09<\/li>\n\n\n\n<li>\u9700\u8981<strong>\u590d\u6742\u6743\u9650\u7ba1\u7406<\/strong>\u7684\u4f01\u4e1a\u5e94\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u8fd9\u5c31\u662f\u53d6\u820d\u3002BeeChat \u4e0d\u8ffd\u6c42\u5927\u800c\u5168\uff0c\u8ffd\u6c42\u7684\u662f<strong>\u7528\u6700\u5c0f\u7684\u590d\u6742\u5ea6\uff0c\u8986\u76d6\u6700\u591a\u7684\u771f\u5b9e\u9700\u6c42<\/strong>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u5206\u949f\u8dd1\u8d77\u6765<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. \u4e0b\u8f7d\ngit clone https:\/\/github.com\/Remtg\/beechat.git\n\n# 2. \u542f\u52a8\uff08\u4efb\u610f\u9759\u6001\u670d\u52a1\u5668\uff09\ncd beechat\npython -m http.server 3000\n\n# 3. \u6253\u5f00\u6d4f\u89c8\u5668\n# http:\/\/localhost:3000\n# \u7528\u624b\u673a\u8fde\u540c\u4e00 WiFi \u4e5f\u80fd\u8bbf\u95ee<\/code><\/pre>\n\n\n\n<p>\u4fee\u6539\u7ba1\u7406\u5bc6\u7801\uff1a\u770b <a href=\"https:\/\/github.com\/Remtg\/beechat#\u4fee\u6539\u7ba1\u7406\u5bc6\u7801\">README<\/a>\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u6700\u540e<\/h2>\n\n\n\n<p>\u8fd9\u4e2a\u9879\u76ee\u7684\u6838\u5fc3\u7406\u5ff5\u662f\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u4e0d\u662f\u6240\u6709\u5e94\u7528\u90fd\u9700\u8981\u4e00\u4e2a\u540e\u7aef\u3002\u516c\u5171\u57fa\u7840\u8bbe\u65bd\u5df2\u7ecf\u8db3\u591f\u597d\uff0c\u597d\u5230\u4f60\u53ef\u4ee5\u628a\u670d\u52a1\u7aef\u7684\u804c\u8d23\u5916\u5305\u7ed9\u5b83\u4eec\u3002<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>\u5f53 MQTT \u4ee3\u7406\u66ff\u4f60\u8f6c\u53d1\u6d88\u606f\u3001Canvas \u66ff\u4f60\u538b\u7f29\u56fe\u7247\u3001Crypto API \u66ff\u4f60\u9a8c\u8bc1\u5bc6\u7801\u2014\u2014\u4f60\u5269\u4e0b\u7684\u5de5\u4f5c\uff0c\u5c31\u662f\u5199\u4e00\u4e2a\u6f02\u4eae\u7684 HTML\u3002<\/p>\n\n\n\n<p>\u8fd9\u5c31\u662f BeeChat\u3002\u4e00\u4e2a HTML \u6587\u4ef6\uff0c\u4e00\u4e2a\u804a\u5929\u5ba4\uff0c\u4e00\u79cd\u6001\u5ea6\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/Remtg\/beechat\">\u2b50 Star on GitHub<\/a> | <a href=\"https:\/\/remtg.github.io\/beechat\">\ud83d\udd17 \u5728\u7ebf\u4f53\u9a8c<\/a><\/strong><\/p>\n\n\n\n<div class=\"wp-block-argon-github github-info-card card shadow-sm github-info-card-full is-style-github-info-card-full\" data-author=\"Remtg\" data-project=\"beechat\"><div class=\"github-info-card-header\"><a href=\"https:\/\/github.com\/\" target=\"_blank\" title=\"Github\" rel=\"noopener\"><span><i class=\"fa fa-github\"><\/i>\u00a0GitHub<\/span><\/a><\/div><div class=\"github-info-card-body\"><div class=\"github-info-card-name-a\"><a href=\"https:\/\/github.com\/Remtg\/beechat\" target=\"_blank\" rel=\"noopener\"><span class=\"github-info-card-name\">Remtg\/beechat<\/span><\/a><\/div><div class=\"github-info-card-description\"><\/div><\/div><div class=\"github-info-card-bottom\"><span class=\"github-info-card-meta github-info-card-meta-stars\"><i class=\"fa fa-star\"><\/i>\u00a0<span class=\"github-info-card-stars\"><\/span><\/span><span class=\"github-info-card-meta github-info-card-meta-forks\"><i class=\"fa fa-code-fork\"><\/i>\u00a0<span class=\"github-info-card-forks\"><\/span><\/span><\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6ca1\u6709\u670d\u52a1\u5668\u3001\u6ca1\u6709\u6570\u636e\u5e93\u3001\u6ca1\u6709\u540e\u7aef\u4ee3\u7801\u3002\u4e00\u4e2a HTML \u6587\u4ef6\u4e22\u4e0a\u9759\u6001\u6258\u7ba1\uff0c\u804a\u5929\u5ba4\u5c31\u8dd1\u8d77\u6765\u4e86\u3002\u542c\u8d77\u6765\u50cf\u5929\u65b9\u591c\u8c2d\uff1f\u5f80 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[19,15,17,20,14,18,21,16,22],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-canvas","tag-mqtt","tag-serverless","tag-websocket","tag-14","tag-18","tag-21","tag-16","tag-22"],"_links":{"self":[{"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159"}],"version-history":[{"count":1,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":164,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/159\/revisions\/164"}],"wp:attachment":[{"href":"https:\/\/remrey.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remrey.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}