Tôi đang xây dựng một hệ thống đơn giản như nguồn cấp dữ liệu tin tức thời gian thực, sử dụng node.js + socket.io.phát sóng node.js + socket.io từ máy chủ, thay vì từ một khách hàng cụ thể?
Vì đây là hệ thống "chỉ đọc", khách hàng kết nối và nhận dữ liệu, nhưng khách hàng không bao giờ thực sự gửi bất kỳ dữ liệu nào của riêng họ. Máy chủ tạo ra các tin nhắn cần được gửi đến tất cả các máy khách, không có máy khách nào tạo ra bất kỳ thông báo nào; nhưng tôi cần phải phát sóng.
Các documentation for socket.io's broadcast (cuối trang) nói
Để phát sóng, chỉ cần thêm một lá cờ
broadcast
-emit
vàsend
lời gọi phương thức. Phát sóng có nghĩa là gửi một tin nhắn đến tất cả mọi người trừ khi ổ cắm khởi động nó.
Vì vậy, tôi đang nắm bắt được khách hàng gần đây nhất để kết nối, vào một biến, sau đó emit()
để ổ cắm mà vàbroadcast.emit()
để ổ cắm đó, chẳng hạn mà khách hàng mới này được các dữ liệu mới và tất cả các khách hàng khác . Nhưng nó cảm thấy như vai trò của khách hàng ở đây là không có gì hơn là một workaround cho những gì tôi nghĩ socket.io đã được hỗ trợ.
Có cách nào để gửi dữ liệu đến tất cả khách hàng dựa trên sự kiện do máy chủ khởi xướng không?
cách tiếp cận hiện tại của tôi là khoảng:
var socket;
io.sockets.on("connection", function (s) {
socket = s;
});
/* bunch of real logic, yadda yadda ... */
myServerSideNewsFeed.onNewEntry(function (msg) {
socket.emit("msg", { "msg" : msg });
socket.broadcast.emit("msg", { "msg" : msg });
});
Về cơ bản các sự kiện làm cho dữ liệu cần gửi cho khách hàng là tất cả các server-side, không client-side.
Khi tôi thử rằng tôi đã nhận được lỗi rằng 'io.sockets.emit' không phải là một hàm được xác định. – d11wtq
Nó hoạt động cho tôi: P, phiên bản nào của socket io bạn đang sử dụng – user482594
Hmm, có vẻ như tôi đã thực sự thử 'io.sockets.broadcast.emit()', xấu của tôi, điều này dường như hoạt động! – d11wtq