Hỏi về WebSocket
Chào mọi người Mình đang gặp bài toán này, mong mọi người giúp đỡ.
Mình đang xây dựng chức năng notify.
Notify sẽ được nhận từ websocket server của 1 bên thứ 3.
Việc của mình là tạo websocket client để connect tới websocket server kia, rồi khi nào nhận được notify thì sẽ gửi nội dung notify đó vào email cho người dùng.
Mình có thử tìm hiểu về websocket client thì chủ yếu thấy hướng dẫn tạo bằng js và chạy ở trình duyệt.
Tuy nhiên nếu đóng trình duyệt thì cũng ko nhận được notify nữa.
Mình muốn hỏi có cách nào tạo websocket client từ server, để nó có thể connect và lắng nghe 24/7 không?
Cảm ơn mọi người!
3 CÂU TRẢ LỜI
Có thể dùng nodejs ws để handle kết nối socket ở phía server. dưới đây là ví dụ
// index.js
const {WebSocket} = require('ws');
const socket = new WebSocket(process.env.ENDPOINT, {
headers: {
Authorization: `Bearer ${process.env.TOKEN}`
},
});
socket.on('message', function message(data) {
// do somethings...
});
// run: $ node index.js
MÌnh đang hiểu là browser của bạn connect vào cái websocket server của bên thứ 3. Khi browser nhận được notifify thì sẽ gửi nội dung đó vào email cho người dùng.
Cách triển khai của bạn nghe nó hơi ngược ngược sao ấy. Việc gửi email sẽ cần thông tin như username, mật khẩu của mail, thì việc này phải do phía server đảm nhiệm chứ sao lại để client handle được nhỉ?
Còn việc bạn connect tới ws server ở browser mình nghĩ khó mà đảm bảo 24/7, thường thì các websocket sẽ có heartbeat làm healthcheck, ví dụ như bạn kết nối mà không làm gì thì ws server sẽ ngắt kết nối, mạng của bạn không ổn định thì cũng sẽ có thể heartbeat fail và ngắt kết nối...
Cách triển khai của bạn nghe nó hơi ngược ngược sao ấy. Việc gửi email sẽ cần thông tin như username, mật khẩu của mail, thì việc này phải do phía server đảm nhiệm chứ sao lại để client handle được nhỉ?
Vấn đề gửi mail thì tất nhiên là làm phía server rồi bạn.
Vấn đề chính mình hỏi là cách connect tới websocket server của bên thứ 3 từ server của mình hay ko. thay vì connect từ browser.
Còn việc bạn connect tới ws server ở browser mình nghĩ khó mà đảm bảo 24/7
Cái này thì mình biết, cơ mà có thể retry đc.