2012-05-30 41 views
5

Tôi đang sử dụng các nút cho máy chủ web giải mã các tham số GET và trả về dữ liệu ở một số định dạng được mã hóa. Giải mã/mã hóa được thực hiện bằng cách sử dụng mô-đun mã hóa của các nút, mà dường như là đồng bộ. Trong khi thời gian thực hiện để phục vụ một yêu cầu duy nhất đủ nhanh, việc chặn vòng lặp sự kiện đã làm cho dịch vụ hoạt động kém với đồng thời.Cách để thực hiện các tác vụ CPU bị ràng buộc trong các nút bấm

Yêu cầu của tôi rất đơn giản, làm cho chức năng mã hóa/giải mã bên ngoài vòng lặp sự kiện.

  1. quá trình riêng biệt (child_process hoặc cụm)

Đây có thể là một quá trình riêng biệt chỉ duy nhất cho mục đích này, nhưng kể từ khi mã hóa/giải mã sẽ được ngăn chặn trong quá trình đứa trẻ này sẽ ngăn chặn quá trình con để nhận được tin nhắn mới tức là sẽ không bao giờ có một tình huống khi hai chuỗi được mã hóa như quá trình con cũng sẽ được đơn luồng.

  1. Chủ đề riêng biệt cho mỗi yêu cầu (đề-một-gogo hoặc sợi hoặc nút-WebWorker)

Tạo một thread riêng biệt cho từng yêu cầu để thực hiện các hoạt động mã hóa/giải mã, nhưng không ai trong số các mô-đun dường như hoạt động như mong đợi, tức là luồng-a-gogo không cài đặt thông qua npm, chất xơ không tạo ra một chuỗi riêng biệt trên run(), node-webworker not working.

Có ai đó phải đối mặt với một vấn đề tương tự hoặc có cách nào đó để dễ dàng tạo các chuỗi trong nút bằng thông điệp đơn giản.

+0

Câu trả lời là ở # 1 bạn cần để biến tính năng chặn/đang hoạt động của bạn thành kiểu định hướng sự kiện thụ động – ControlAltDel

+0

Tôi nghĩ rằng các nhiệm vụ và nút CPU bị ràng buộc không phù hợp. Sau đó, bạn nên sử dụng Java và cho phép nút/java giao tiếp với nhau một cách hiệu quả. – Alfred

+0

Tôi hiểu rằng các nhiệm vụ ràng buộc CPU trong nodejs là khủng khiếp, do đó dự kiến ​​sẽ được xây dựng trong mô-đun mã hóa để xử lý riêng biệt. Nhưng không có tùy chọn nào khác ngoài việc chuyển tiếp trên Java/C? – mdprasadeng

Trả lời

1

Điều này được tích hợp vào các quy trình con của nút. Documents ở đây:

http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle

Bạn cũng có thể sử dụng cụm:

http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

Với cụm, nó sẽ làm việc gì đó như:

if (cluster.isMaster) { 
    var worker = cluster.fork(); 
    worker.send('encodeThisString'); 

} else if (cluster.isWorker) { 
    process.on('message', function(msg) { 
    var encrypted = crypto.doSomeEncryption(msg); 
    process.send(encrypted); 
    }); 
} 
Các vấn đề liên quan