2012-04-30 34 views
5

Tôi có một máy chủ socket.io mà nghe socket:Là đa luồng Socket.IO?

io.sockets.on('connection', function(socket){ 
    socket.on('myEvent', function(data){ 
     socket.emit('eventReceived', { status: 1 }); 
    }); 
}); 

là mã này làm việc trong multithread? nếu hai khách hàng sẽ phát ra sự kiện myEvent, nó sẽ hoạt động cùng một lúc cho cả hai khách hàng? hoặc nó sẽ được xử lý một cái khác?

Rất cám ơn!

+1

Không, nó không đa luồng. Node.js sử dụng một vòng lặp sự kiện luồng đơn. Xem [câu trả lời này] (http://stackoverflow.com/questions/9362823/why-is-a-function-and-a-callback-non-blocking-in-node-js/9363071#9363071) của tôi cho một giải thích thêm. –

+0

Nếu Node.js không đa luồng, điều đó có nghĩa là Socket.IO cũng không đa luồng? – udidu

+1

Chính xác. Bạn có thể mở rộng bằng cách chạy phần phụ trợ được phân phối cho tin nhắn, có một [redis store] (https://github.com/LearnBoost/socket.io/blob/master/lib/stores/redis.js) được tích hợp sẵn. –

Trả lời

1

Không có gì trong Node.js được đa luồng bao gồm bất kỳ gói nào có sẵn thông qua npm. Có một mô-đun cụm thử nghiệm có sẵn trong lõi

http://nodejs.org/docs/v0.10.2/api/cluster.html

+0

Chỉ vì Node.js có một vòng lặp sự kiện duy nhất không có nghĩa là các tiến trình không đồng bộ dưới mui xe, đằng sau hậu trường, không phải là đa luồng. Bởi vì nhiều người. Dưới đây là một bài viết giải quyết một vấn đề trong vấn đề đó: https://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/ – user1588877