2016-02-26 12 views
5

Tôi sẽ sớm sử dụng máy chủ có tên là Undertow. Các website nói:Nếu máy chủ web không bị chặn, điều này có nghĩa là nó đang xử lý IO giống như node.js không?

Undertow là một máy chủ web performant linh hoạt viết bằng java, cung cấp cả hai chặn và non-blocking API dựa trên nio

Nếu Undertow phép non-blocking, là giống nhau như node.js? Tôi không có nghĩa là ngôn ngữ hay bất cứ thứ gì như thế. Tôi có một dự án riêng biệt, nơi tôi nghĩ node.js sẽ là một lựa chọn tốt, nhưng nếu tôi có thể sử dụng một sản phẩm duy nhất cho nhiều dự án thì nó sẽ hữu ích.

EDIT: Tôi đã tìm thấy câu hỏi này. Java NIO non-blocking mode vs node.js asychronous operation Và tôi bắt đầu nghĩ rằng tôi đã nhầm lẫn mọi thứ.

+0

Bản sao có thể có của [Chế độ không chặn Java Java không hoạt động không đồng bộ node.js] (http://stackoverflow.com/questions/20740961/java-nio-non-blocking-mode-vs-node-js-asychronous -kiểm tra) – EJP

Trả lời

1

Undertow được dựa trên thư viện JBoss XNIO và như Nodejs, XNIO dựa vào khả năng hệ điều hành (epoll hoặc kqueue nếu có) để được thông báo cho các sự kiện IO (khi dữ liệu có sẵn để đọc từ một ổ cắm cho thí dụ).

Trong trường hợp Undertow, việc chấp nhận yêu cầu gửi đến được thực hiện theo mô hình này, theo số IO threads. Làm các hoạt động chặn trên các luồng này có nghĩa là trì hoãn việc xử lý các yêu cầu mới đến. See Undertow's documentation on IO threads

Bên cạnh đề IO, Undertow quản lý một thread hồ bơi, Worker threads, để xử lý ngăn chặn các tác vụ (nghĩ về công việc như gọi một webservices hoặc truy vấn cơ sở dữ liệu.) Và đây là những gì bạn sẽ không nhận được với Nodejs!

Để sử dụng chuỗi Công nhân, yêu cầu xử lý phải là được gửi từ chuỗi IO. API là toàn diện và dễ sử dụng, một lần nữa, see Undertow's documentation, làm điểm bắt đầu.

+0

Bạn có nghĩa là sử dụng Undertow hơn Node.js tôi có thể xử lý nhiều yêu cầu hơn không? Điều gì về việc sử dụng bộ nhớ? –

+0

Không, đây không phải là ý tôi. Nó là khá nhiều không thể trả lời câu hỏi như vậy, nó thậm chí không thực sự có ý nghĩa. Tất cả phụ thuộc vào những gì bạn làm trong những yêu cầu này.Những gì tôi nói là với Undertow bạn có thể sử dụng các chuỗi java thông thường - các chuỗi công việc (chúng ánh xạ tới các luồng hạt nhân) để thực hiện các tác vụ chặn (gọi DB, xử lý tệp ...), và điều này bạn không thể làm trong Nodej. Với Nodejs bạn không thực sự quan tâm đến việc chặn các tác vụ (nếu bạn biết bạn đang làm gì) vì hầu hết các thư viện bạn sử dụng sẽ mong đợi một cuộc gọi lại được gọi khi nhiệm vụ kết thúc. – aramaki

0

Từ Wikipedia:

Trong khoa học máy tính, không đồng bộ I/O, hoặc non-blocking I/O là một hình thức xử lý đầu vào/đầu ra cho phép xử lý khác để tiếp tục trước khi truyền xong.

Không chặn và không đồng bộ là từ đồng nghĩa và đây là cách tất cả máy chủ web node.js chuẩn hoạt động.

+0

Vì vậy, bạn có nghĩ rằng đó chỉ là sự lựa chọn giữa các môi trường? – johnny

+0

Không hề. Điều này chỉ có nghĩa là các máy chủ web khác nhau đang sử dụng cùng một công nghệ để xử lý IO. Vẫn còn rất nhiều khác biệt về chức năng và hiệu suất. Tôi không có đủ kinh nghiệm với các máy chủ khác nhau để có thể giới thiệu bất kỳ tùy chọn nào ở đây. – bolav

+0

Wikipedia lại sai. Không đồng bộ và không chặn là hai mô hình khác nhau, không phải là từ đồng nghĩa với nhau. Trong chế độ không chặn, quá trình chuyển hoàn tất hoặc không xảy ra khi cuộc gọi I/O trả về. – EJP

Các vấn đề liên quan