Tôi đang triển khai socket.io trong node.js cho dự án Windows Azure. Tôi phải gửi dữ liệu đến tất cả các khách hàng được kết nối theo các khoảng thời gian đều đặn.Đa luồng trong Node.js?
Tôi mới sử dụng node.js nhưng tôi đoán không thể đa luồng được. Mục đích của socket.io là hỗ trợ các ứng dụng thời gian thực, vì vậy có cách nào để tôi có thể gửi dữ liệu liên tục đến tất cả các máy khách được kết nối của tôi theo chu kỳ bình thường và cũng xử lý bất kỳ dữ liệu nào mà máy khách gửi đến máy chủ socket.io cùng một lúc không?
EDIT:
Đây là khoảng thực hiện socket.io tôi
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('first', "connected");
socket.on('clientData', function (data) {
//processing the data
});
});
function requestQueue() {
// some processing
io.sockets.emit('broadcast', recordsQueue);
// should go to sleep for a time period
}
Về cơ bản tôi muốn phương pháp requestQueue được chạy liên tục như một chủ đề, mà sẽ phát ra dữ liệu cho khách hàng kết nối trong khoảng thời gian cụ thể. Và cũng có thể nếu khách hàng gửi bất kỳ dữ liệu nào đến sự kiện "clientData", thì tôi sẽ có thể nhận dữ liệu và xử lý nó.
Bất kỳ ý tưởng nào về cách tôi có thể làm điều đó?
Cảm ơn
Giải pháp của tôi:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('first', "connected");
socket.on('clientData', function (data) {
//processing the data
});
});
function requestQueue() {
var sleepTime = 0;
// calcuate sleepTime
io.sockets.emit('broadcast', recordsQueue);
// should go to sleep for a time period
if(sleepTime !=0)
setTimeout(function() { requestQueue() }, sleepTime);
}
Cảm ơn mọi người đã trả lời! setInterval đã giải quyết vấn đề của tôi, nhưng có phương thức requestQueue của tôi thực hiện một số tính toán nặng và lo lắng rằng hiệu suất của các yêu cầu socket.io mà client tạo ra sẽ bị ảnh hưởng bởi nó. Tôi sẽ thực sự đánh giá cao nếu bạn có thể xây dựng một chút về lưu ý bên của bạn, có thể với một đoạn mã hoặc một số liên kết nếu có thể. Cảm ơn rất nhiều! – Bitsian
Vâng, đây là sự cố định kỳ đối với các ứng dụng hoặc ứng dụng đơn luồng chỉ có một chuỗi duy nhất được dành riêng cho một tác vụ cụ thể. Ví dụ, các ứng dụng front-end của Windows chỉ có thể có một thread UI duy nhất, vì vậy bạn phải rất cẩn thận để đảm bảo rằng bất kỳ tính toán dài hạn nào được tải xuống một luồng/process/etc khác để tránh làm gián đoạn bơm thông báo GUI chính. Nút có một ràng buộc tương tự ở chỗ nó chỉ có một luồng thực thi duy nhất, mặc dù có thể có rất nhiều I/O không bị chặn vì công việc đó xảy ra độc lập với luồng thực thi. –
Đây là câu hỏi SO về tính toán dài hạn trong nút có thể trợ giúp: http://stackoverflow.com/questions/3809165/long-running-computations-in-node-js –