Có thể nói node.js là một máy chủ web không?


92

Tôi thấy rằng tôi đang nhầm lẫn giữa khung công tác web và máy chủ web.

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

Có thể nói node.js là một máy chủ web không ??? Tôi rất bối rối giữa máy chủ web / khuôn khổ.

Nếu bằng cách nào đó node.js là một loại máy chủ web, không phải webframework (Express thì có), tại sao chúng ta cần đặt toàn bộ node.js lên trên máy chủ Nginx trong thực tế hữu ích ?? Câu hỏi trên SO

Ai có thể giúp???

Bộ dụng cụ


4
Tornado là một máy chủ web + một khuôn khổ web nhỏ. :) Tôi nghĩ ezpresso là đúng. Node.js thực sự là một môi trường thời gian chạy giống như JRE của Java. Node.js đang được sử dụng ngày càng nhiều cho các ứng dụng không phải web. Các chương trình bạn viết bằng Node.js không có khả năng máy chủ web trừ khi bạn thêm nó. Đúng là, Node.js có các chức năng gốc rất cao cho phép bạn dễ dàng tạo một máy chủ web với http.CreateServer (...). Listen (80); nhưng không có máy chủ web nào tồn tại trong chương trình của bạn trừ khi bạn thêm nó vào. Vì vậy, bản thân Node.js không phải là một máy chủ web. Thay vào đó, bạn sử dụng Node.js để tạo một.
OCDev

1
Nói một cách chính xác, bạn không cần đặt máy chủ web lên trên Node.js - bạn có thể viết một máy chủ nhỏ trong dự án Node của mình và có chức năng xử lý tất cả các yêu cầu trình duyệt thông thường cũng như những yêu cầu cụ thể đối với ứng dụng web có liên quan. Nhưng những thứ như thay đổi trang web được xử lý tốt hơn bởi một máy chủ web, ví dụ: Nginx. Vì vậy, mặc dù bạn không cần phải sử dụng một máy chủ web với Node, nhưng làm như vậy thường là khôn ngoan hơn.
Trunk

C ++ có phải là máy chủ web không? Không, đó là ngôn ngữ lập trình mà bạn có thể sử dụng để viết. Tương tự với node.js.
alfadog67

Câu trả lời:


53

máy chủ web

Máy chủ web có thể đề cập đến phần cứng (máy tính) hoặc phần mềm (ứng dụng máy tính) giúp cung cấp nội dung có thể được truy cập thông qua Internet. 1

Chức năng chính của máy chủ web là cung cấp các trang web theo yêu cầu cho khách hàng. Điều này có nghĩa là phân phối tài liệu HTML và bất kỳ nội dung bổ sung nào có thể được đưa vào tài liệu, chẳng hạn như hình ảnh, biểu định kiểu và tập lệnh.

Máy chủ web là cơ bản để gửi yêu cầu / phân trang cho khách hàng / người dùng trên internet

Khung web

Khung ứng dụng web là một khung phần mềm được thiết kế để hỗ trợ sự phát triển của các trang web động, ứng dụng web và dịch vụ web. Khung này nhằm mục đích giảm bớt chi phí liên quan đến các hoạt động phổ biến được thực hiện trong phát triển Web. Ví dụ, nhiều khuôn khổ cung cấp thư viện để truy cập cơ sở dữ liệu, khuôn mẫu tạo khuôn mẫu và quản lý phiên, và chúng thường thúc đẩy việc tái sử dụng mã.

Một khung công tác web sử dụng một máy chủ web để gửi các yêu cầu đến máy khách, nhưng nó không phải là máy chủ web.

Node.js

Node.js là một nền tảng được xây dựng dựa trên thời gian chạy JavaScript của Chrome để dễ dàng xây dựng các ứng dụng mạng nhanh, có thể mở rộng. Node.js sử dụng mô hình I / O hướng sự kiện, không chặn, làm cho nó nhẹ và hiệu quả, hoàn hảo cho các ứng dụng thời gian thực sử dụng nhiều dữ liệu chạy trên các thiết bị phân tán.

Nhưng sau đó bạn cũng có thể tạo ứng dụng CLI nên tôi nghĩ bạn nên xem nó nhiều hơn như một nền tảng để viết các chương trình javascript chạy trên máy chủ (máy tính) của bạn bằng ngôn ngữ lập trình Javascript thay vì chỉ trong trình duyệt như lúc đầu. Tôi nghĩ bạn có thể thấy nó là ??Javascript++

Bạn cũng có thể viết máy chủ web với node.js như bạn có thể thấy trên trang đầu của node.js. Lúc đầu, Ryan nói rằng bạn có thể đặt Nginx trước node.js vì tính ổn định của dự án. Dự án đã và vẫn còn khá trẻ. Nginx là một máy chủ web đã được chứng minh sẽ tiếp tục chạy trong khi node.js có thể gặp sự cố. Sau đó, một lần nữa rất nhiều người dùng chỉ sử dụng node.js cho việc đó.


6
Node.js là một JavaScript runtime được xây dựng trên cơ V8 JavaScript của Google ...
ozanmuyes

1
Máy chủ web (apache hoặc nginx) có thể là phần cứng như thế nào?
shadow0359

Tôi nghĩ rằng câu hỏi chính là liệu Node.js có lắng nghe cổng HTTP theo mặc định hay không? Nếu vậy, nó cũng phân loại nó như một máy chủ HTTP.
forsberg

1
Chúng ta có thể nói rằng hình vuông là một hình chữ nhật nhưng không phải ngược lại. bạn đang nói rằng Nodejs không chỉ là một máy chủ web? hay nó hoàn toàn không đại diện cho một máy chủ web?
CME64

1
@ shadow0359 Hơi muộn, nhưng đối với bất kỳ ai khác đọc được điều này, máy chủ web không chỉ là phần mềm. Nó cũng có thể có nghĩa là các phần cứng vật lý, máy tính nơi mà các phần mềm đang chạy
Christoffer

25

Tôi sẽ nói Node.jsMôi trường thời gian chạy hoặc Công cụ thời gian chạy.

Có lẽ định nghĩa tốt nhất mà tôi tìm thấy cho đến nay xuất phát từ một bài báo của Rob Gravelle có tựa đề "Giới thiệu về Node.js" :

Node.js là một phần môi trường thời gian chạy và một phần thư viện để xây dựng các ứng dụng mạng sử dụng JavaScript phía máy chủ. Nó sử dụng công cụ thời gian chạy JavaScript của Chrome để thực thi mã JS trực tiếp mà không cần hộp cát của trình duyệt.

Ngoài ra, PCMAG.COM Encyclopedia cung cấp định nghĩa sau về "công cụ thời gian chạy":

Phần mềm mà các ứng dụng nhất định phụ thuộc vào để chạy trong máy tính. Công cụ thời gian chạy phải đang chạy trong máy tính để ứng dụng thực thi. Nó cung cấp các thói quen và chức năng chung mà các ứng dụng yêu cầu, và nó thường chuyển đổi chương trình, ngôn ngữ tạm thời, ngôn ngữ trung gian, thành ngôn ngữ máy.

Ngoài ra, bài viết trên Wikipedia có tên "Hệ thống thời gian chạy" tuyên bố:

Hệ thống thời gian chạy (còn được gọi là hệ thống thời gian chạy, môi trường thời gian chạy hoặc chỉ thời gian chạy) thực hiện hành vi cơ bản của một ngôn ngữ máy tính, cho dù ngôn ngữ đó là ngôn ngữ biên dịch, ngôn ngữ thông dịch, ngôn ngữ miền cụ thể được nhúng hay được gọi thông qua API cũng như pthreads.

... Hệ thống thời gian chạy có thể thực hiện hành vi của các tác vụ như vẽ văn bản trên màn hình hoặc tạo kết nối Internet. Nó cũng thường hoạt động như một lớp trừu tượng che giấu sự phức tạp hoặc các biến thể trong các dịch vụ do hệ điều hành cung cấp.

Chà, có bất kỳ môi trường thời gian chạy nào (hoặc thậm chí cả nền tảng phần mềm) như Node.js ngoài đó không? Tôi đoán JRE là một ví dụ điển hình về một môi trường như vậy. Node.js và JRE - chúng có nhiều điểm chung. Tất cả chúng đều có (một loại) máy ảo, một thư viện lớp và một khuôn khổ để triển khai nhiều loại ứng dụng, bao gồm cả những ứng dụng CLI.

Vì vậy, quay lại câu hỏi của bạn, chúng ta có thể nói rằng Node.js là một máy chủ web không? Hãy thay đổi "Node.js" cho "JRE" và trả lời nếu JRE là một máy chủ web. Câu trả lời là không.

Tất cả những gì chúng ta có thể nói là Node.js là một môi trường thời gian chạy mà người ta có thể sử dụng để triển khai một máy chủ web. Vâng, đó là ý kiến ​​của tôi.


Bạn bỏ qua mục đích của việc có thời gian chạy đó ngay từ đầu - cũng như sự vô ích khi có nó mà không có tất cả các mô-đun [ nodejs.org/docs/latest-v9.x/api/] cần thiết để làm cho nó thực sự hữu ích.
Trunk

19

Nói nút là một máy chủ web cũng giống như nói javacript chỉ có thể chạy bên trong một trình duyệt, bạn có thể nói vậy nhưng nó cũng có thể làm rất nhiều thứ khác.

NodeJS

  1. [Môi trường thời gian chạy Javascript (công cụ Chrome v8) + Thư viện nút / API]
  2. Có thể tạo một máy chủ web, cũng có thể được mô tả như một máy chủ Ứng dụng

bày tỏ

  1. Khuôn khổ web (sử dụng máy chủ web của nodejs để phân phát tệp)

Nginx

  1. máy chủ web

Trong sản xuất, hầu hết mọi người sử dụng Nginx phía trước máy chủ nút như một máy chủ proxy để phục vụ các tệp tĩnh và các phần tử khác nhau như bộ nhớ đệm, định tuyến, v.v.


1
cộng thêm một điều nữa khi đề cập rằng NodeJS có thể được sử dụng cho cả máy chủ web và máy chủ ứng dụng, và đề cập đến Express.
Yahya

16

Tôi sẽ phân loại node.js như một khung máy chủ, với các gói có sẵn có thể sử dụng nó như một máy chủ HTTP, hoặc một máy chủ WebSocket hoặc giao thức tùy chỉnh của riêng bạn, v.v.

Lý do bạn có thể đặt nginx trước máy chủ node.js của mình là để cân bằng tải HTTP và đảo ngược proxy trên một số máy chạy ứng dụng máy chủ của bạn.


1
Đúng. Khuôn khổ web giúp bạn viết một ứng dụng web, sử dụng HTML và JavaScript cho giao diện người dùng và giao tiếp qua HTTP. Ví dụ về khuôn khổ web sẽ là Express cho node.js hoặc Django cho Python.
cmv

Câu trả lời tốt nhất trong tất cả các lần thử. +1.
Thân cây

tôi đoán việc gắn ngnix sẽ không phải là giải pháp thích hợp, chúng ta có thể sử dụng proxy hs cho giải pháp cân bằng tải
Kartikeya Sharma

@cmv xin lỗi tôi đến trễ cuộc trò chuyện !!! Mặc dù vậy, bạn có phải đặt nginx ở phía trước của nút nhưng Load Balancer trên đó không? Tôi có thể chỉ đặt bộ cân bằng tải trước phiên bản EC2 và thực hiện với nó để cho phép nó phân luồng liên tục đến nút và thể hiện điểm cuối không?
lopezdp

4

Làm thế nào tôi cảm nhận được nỗi đau của bạn!

Giống như nhiều người khác, tôi thấy thật khó để hiểu được bản chất của Node.js vì hầu hết mọi người chỉ viết / nói về phần của Node mà họ thấy hữu ích - và phần họ thấy thú vị thường là lợi ích phụ của Node hơn là chính của nó. mục đích. Tôi phải nói rằng tôi nghĩ thật điên rồ khi mọi người nói rằng Node chỉ là một thời gian chạy JavaScript. Việc sử dụng JavaScript của Node - và việc lựa chọn thời gian chạy V8 - chỉ đơn giản là phương tiện để kết thúc , là công cụ tốt nhất cho vấn đề mà các nhà phát triển của Node muốn giải quyết.

Mục đích chính của Node là làm cho việc quản lý các sự kiện của người dùng trong ứng dụng web hiệu quả hơn. Vì vậy, Node áp đảođược sử dụng ở mặt sau của một ứng dụng web. Quản lý sự kiện yêu cầu rằng một cái gì đó đang lắng nghe ở máy chủ đối với các sự kiện người dùng này. Vì vậy, một máy chủ http phải được thiết lập để định tuyến mỗi sự kiện đến tập lệnh xử lý thích hợp của nó. Node cung cấp một khuôn khổ để nhanh chóng thiết lập một máy chủ để lắng nghe trên một cổng dành riêng cho các yêu cầu của người dùng. Node sử dụng JavaScript để xử lý sự kiện vì JavaScript có các hàm gọi lại: điều này cho phép tạm dừng một tác vụ cho đến khi trả về kết quả của một tác vụ phụ thuộc. Không nhiều ngôn ngữ khác có tính năng này và những ngôn ngữ có thể không có trình thông dịch hiệu quả như thời gian chạy V8 của Google. Hầu hết các nhà phát triển web đều biết JavaScript nên không cần học thêm ngôn ngữ nào với Node. Hơn nữa, có các chức năng gọi lại cho phép đặt tất cả các tác vụ của người dùng trên một luồng duy nhấtmà không áp dụng quy tắc chặn rõ ràng cho các tác vụ yêu cầu quyền truy cập vào cơ sở dữ liệu hoặc hệ thống tệp. Và đây là điều dẫn đến hiệu quả điều hành vượt trội của Node khi sử dụng đồng thời nhiều - mục đích chính cho sự phát triển của nó.

Để giúp người dùng Node nhanh chóng viết lại mã kết thúc, các nhà phát triển của Node cũng đã tổ chức cả một thư viện JS tích hợp cho các tác vụ thông thường (ví dụ: các vấn đề liên quan đến yêu cầu HTTP, mã hóa chuỗi (de), luồng, v.v.) và kho lưu trữ NPM (Node Package Manager) : đây là một bộ mã nguồn mở, do người dùng duy trì cho các chức năng tiêu chuẩn và tùy chỉnh khác nhau. Tất cả các dự án Node đều cho phép nhập các gói NPM vào một dự án thông qua lệnh cài đặt npm đã.

Các yêu cầu của người dùng được xử lý qua Node sẽ là những thứ mà ứng dụng web cần như xác thực, truy vấn cơ sở dữ liệu, quản lý nội dung (Strapi CMS), v.v. Tất cả những thứ này sẽ được gửi đến cổng Node. (Trong trường hợp việc phân tích dữ liệu nhận được từ cơ sở dữ liệu tốn rất nhiều thời gian của CPU, loại quy trình này tốt nhất nên được đặt trên một chuỗi riêng biệt để nó không làm chậm các yêu cầu đơn giản hơn của người dùng.) , tải xuống tệp CSS / JS / hình ảnh, v.v., sẽ tiếp tục được trình duyệt gửi đến (các) cổng mặc định trên máy chủ nơi chương trình máy chủ web (Apache, NGinx, v.v.) sẽ xử lý chúng.

Vì vậy, trên thực tế , Node về cơ bản là một khuôn khổ để tạo máy chủ nhanh chóng và xử lý sự kiện nhưng là một khung chỉ thay thế một số chức năng của chương trình máy chủ web.

Các cách sử dụng Node không phụ trợ khác chỉ đơn giản là khai thác một hoặc các tính năng khác của nó, ví dụ: động cơ V8. Ví dụ: các công cụ xây dựng giao diện người dùng Grunt và Gulp sử dụng Node.js để xử lý một tập lệnh xây dựng có thể được mã hóa để chuyển đổi SASS thành CSS, thu nhỏ tệp CSS / JS, tối ưu hóa kích thước / tải hình ảnh, v.v. Nhưng loại công việc này thực sự chỉ sử dụng sản phẩm phụ của Node, không phải công dụng chính của nó là để tạo các quy trình phụ trợ hiệu quả cho các ứng dụng web.


2

Máy chủ web là thứ phục vụ khách hàng của nó thông qua internet qua các giao thức và Web Framework là thứ mà chúng ta gọi là trình biên dịch. Nó bao gồm tất cả các thư viện bắt buộc, quy tắc cú pháp, v.v.

Và node.js là một khung công tác !!


2
Nhưng Node không bao gồm các mô-đun (ví dụ: http) được thiết kế để cho phép một người có thể nhanh chóng mã hóa máy chủ của riêng họ?
Trunk

1

Tôi nghĩ rằng vấn đề là thuật ngữ "máy chủ web" hoặc "máy chủ ứng dụng web" bị thống trị bởi thế giới JEE và các sản phẩm, không được mô-đun hóa như thế giới khung công tác Javascript ngày nay, do đó có thể được kết hợp ít nhiều. một cách tự do.

Tôi không hiểu tại sao một công nghệ, có thể phục vụ các ứng dụng phức tạp trên web, lại không được gọi là máy chủ web hay máy chủ ứng dụng web!

Nếu bạn kết hợp, giả sử Nuxt như một giao diện người dùng, với Feathers làm phụ trợ - bạn sẽ có một phụ trợ phục vụ API REST và giao diện người dùng được hiển thị phía máy chủ!

Tất nhiên, bạn có thể (sai) sử dụng nó để phân phát nội dung tĩnh - sau đó tôi gọi nó là máy chủ web hoặc bạn có thể sử dụng nó để tạo và cung cấp một ứng dụng đầy đủ - sau đó tôi gọi nó là máy chủ ứng dụng web.

Đó là các tính năng hoặc phẩm chất kết hợp tổng hợp lại để phục vụ một mục đích - phải không? - Các tính năng như tính ổn định, khả năng mở rộng và những thứ đó là IMHO sẽ được thêm vào các công nghệ đó theo thời gian. Hiện tại, chúng vẫn còn khá mới.


0

Tôi mới sử dụng Node.js lần đầu tiên để tạo bot Discord. Suy nghĩ của tôi là "Chà, Node.js là một máy chủ? Tôi nghĩ đó là một thư viện JS!" Hoặc có lẽ tôi có thể nghĩ về nó như một khuôn khổ.

Nó có phải là một máy chủ web không? Không nhưng bạn có thể làm một cái với nó. Nó là một máy chủ? Như trong phần mềm nhận truy vấn và cung cấp kết quả? Đúng.

Trong trường hợp của tôi, tôi đã ra lệnh: node index.js

Và bây giờ Node.js đang chờ các yêu cầu phản hồi (thông qua bot của tôi). Đó là một máy chủ, nhưng nó không phục vụ các trang web.


-1

Không, nó là một môi trường thời gian chạy ... vì vậy nó không phải là một máy chủ web và nó không cần một máy chủ để chạy. Vì vậy, có lẽ đây là lý do tại sao nó có thể gây nhầm lẫn. Nó có thể chạy độc lập mà không cần bất kỳ máy chủ web nào vì bản thân nó là một máy chủ chạy nhưng một lần nữa nó không phải là một máy chủ web.


1
Tôi nghĩ câu trả lời này - mặc dù đúng về mặt kỹ thuật - quá ngắn gọn và không đủ thông tin cho người mới.
Trunk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.