08. tháng 4 2025
Nếu sử dụng phương pháp yêu cầu định kỳ (polling) từ ứng dụng mini program của WeChat, ví dụ mỗi 10 giây gửi một lần yêu cầu dữ liệu, trải nghiệm sẽ không được tốt vì sự chậm trễ có thể nhìn thấy bằng mắt thường. Đặc biệt trong trường hợp trạng thái vận hành của thiết bị, nếu người dùng nhấn nút "bắt đầu" mà không thể ngay lập tức thấy trạng thái "đã khởi động", điều này sẽ trông rất thiếu chuyên nghiệp. Thay vào đó, giao thức MQTT có khả năng đẩy thông báo thời gian thực.
Điền tên miền hợp lệ trong phần cấu hình domain của socket. Ví dụ:
wss://www.sunzhongwei.com
Lưu ý rằng đây là một "hố đen" phổ biến khi cấu hình: mặc dù bạn điền wss
trong phần cấu hình, nhưng khi sử dụng thì lại phải dùng wxs
. Đây là một điểm gây khó chịu trong quá trình phát triển.
Tham khảo cách cấu hình chứng chỉ WSS cho dịch vụ EMQX MQTT. Do WSS sử dụng cổng mặc định là 443, giống như HTTPS, bạn có thể đặt quy tắc chuyển tiếp trực tiếp trên Nginx.
Trước tiên, tải xuống xèng thư viện mqtt.js
và thêm nó vào thư mục dự án của mini program.
wxapp_<id_người_dùng_mini_program>_<thời_gian_thuộc_tính>
; 1connectMQTT: function() {
2 const ts = new Date().getTime();
3 const clientId = `wxapp_${this.data.some_id}_${ts}`;
4 try {
5 let mqttClient = mqtt.connect(`${app.globalData.wssHost}`, {
6 ...this.data.mqttOptions,
7 clientId,
8 });
9 this.setData({
10 mqttClient,
11 });
12 this.data.mqttClient.on("connect", () => {
13 console.log("Kết nối đến máy chủ MQTT thành công");
14 this.data.mqttClient.on("message", (topic, payload) => {
15 console.log(`Nhận được tin nhắn - Chủ đề: ${topic}, Nội dung: ${payload}`);
16 });
17 this.data.mqttClient.subscribe("device/sensor/" + this.data.deviceName);
18 });
19 } catch (e) {
20 console.log("Không thể kết nối đến máy chủ MQTT.");
21 }
22},
Từ phiên bản 1.7.0 trở lên, tối đa có thể tồn tại cùng lúc 5 kết nối WebSocket.
let mqttClient = mqtt.connect(`wss://www.sunzhongwei.com/mqtt`, {
...this.data.mqttOptions,
clientId,
});
Chỉ cần thay đổi wss
thành wxs
là xong. Một lỗi khá phiền phức!
Lưu ý rằng nếu quy trình kinh doanh đã hoàn tất, ví dụ như khi chuyển sang trang khác, bạn cần chủ động ngắt kết nối MQTT trong hàm onHide
. Nếu không làm vậy, các thông báo đăng ký vẫn sẽ tiếp tục nhận được ở các trang khác.
wx.redirectTo
kích hoạt sự kiện onUnload
của trang hiện tại.wx.navigateTo
kích hoạt sự kiện onHide
của trang hiện tại.wx.reLaunch
kích hoạt sự kiện onHide
của tất cả các trang ngoại trừ trang sắp chuyển tới.Cách hiển thị nút theo dõi tài khoản công khai trong WeChat i9bet Mini Program.